mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-17 01:55:10 +00:00
Add general support for parenthesized comments on expressions (#6485)
## Summary This PR adds support for parenthesized comments. A parenthesized comment is a comment that appears within a parenthesis, but not within the range of the expression enclosed by the parenthesis. For example, the comment here is a parenthesized comment: ```python if ( # comment True ): ... ``` The parentheses enclose the `True`, but the range of `True` doesn’t include the `# comment`. There are at least two problems associated with parenthesized comments: (1) associating the comment with the correct (i.e., enclosed) node; and (2) formatting the comment correctly, once it has been associated with the enclosed node. The solution proposed here for (1) is to search for parentheses between preceding and following node, and use open and close parentheses to break ties, rather than always assigning to the preceding node. For (2), we handle these special parenthesized comments in `FormatExpr`. The biggest risk with this approach is that we forget some codepath that force-disables parenthesization (by passing in `Parentheses::Never`). I've audited all usages of that enum and added additional handling + test coverage for such cases. Closes https://github.com/astral-sh/ruff/issues/6390. ## Test Plan `cargo test` with new cases. Before: | project | similarity index | |--------------|------------------| | build | 0.75623 | | cpython | 0.75472 | | django | 0.99804 | | transformers | 0.99618 | | typeshed | 0.74233 | | warehouse | 0.99601 | | zulip | 0.99727 | After: | project | similarity index | |--------------|------------------| | build | 0.75623 | | cpython | 0.75472 | | django | 0.99804 | | transformers | 0.99618 | | typeshed | 0.74237 | | warehouse | 0.99601 | | zulip | 0.99727 |
This commit is contained in:
parent
29c0b9f91c
commit
a3d4f08f29
30 changed files with 806 additions and 236 deletions
|
@ -168,6 +168,9 @@ pub enum SimpleTokenKind {
|
|||
/// `:`
|
||||
Colon,
|
||||
|
||||
/// `;`
|
||||
Semi,
|
||||
|
||||
/// '/'
|
||||
Slash,
|
||||
|
||||
|
@ -200,6 +203,7 @@ pub enum SimpleTokenKind {
|
|||
|
||||
/// `^`
|
||||
Circumflex,
|
||||
|
||||
/// `|`
|
||||
Vbar,
|
||||
|
||||
|
@ -226,6 +230,7 @@ pub enum SimpleTokenKind {
|
|||
|
||||
/// `break`
|
||||
Break,
|
||||
|
||||
/// `class`
|
||||
Class,
|
||||
|
||||
|
@ -331,6 +336,7 @@ impl SimpleTokenKind {
|
|||
'}' => SimpleTokenKind::RBrace,
|
||||
',' => SimpleTokenKind::Comma,
|
||||
':' => SimpleTokenKind::Colon,
|
||||
';' => SimpleTokenKind::Semi,
|
||||
'/' => SimpleTokenKind::Slash,
|
||||
'*' => SimpleTokenKind::Star,
|
||||
'.' => SimpleTokenKind::Dot,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue