Skip to content

Commit

Permalink
Don't move type param opening parenthesis comment (#8163)
Browse files Browse the repository at this point in the history
## Summary

This PR fixes the issue to avoid collapsing the type param declaration
if
there's a comment after the opening parenthesis. For example,

```python
type foo[  # comment
    A,
    B
] = int
```

Here, we'll preserve the comment on the same line as is being done for
other
similar type of nodes.

## Test Plan

Add a new test case for it, update the snapshots, and validate the
ecosystem
check.

### Formatter ecosystem

#### `main`

| project | similarity index | total files | changed files |

|----------------|------------------:|------------------:|------------------:|
| cpython | 0.75803 | 1799 | 1647 |
| django | 0.99983 | 2772 | 34 |
| home-assistant | 0.99953 | 10596 | 186 |
| poetry | 0.99891 | 317 | 17 |
| transformers | 0.99966 | 2657 | 330 |
| twine | 1.00000 | 33 | 0 |
| typeshed | 0.99978 | 3669 | 20 |
| warehouse | 0.99977 | 654 | 13 |
| zulip | 0.99970 | 1459 | 22 |

#### `dhruv/type-params`

| project | similarity index | total files | changed files |

|----------------|------------------:|------------------:|------------------:|
| cpython | 0.75803 | 1799 | 1647 |
| django | 0.99983 | 2772 | 34 |
| home-assistant | 0.99953 | 10596 | 186 |
| poetry | 0.99891 | 317 | 17 |
| transformers | 0.99966 | 2657 | 330 |
| twine | 1.00000 | 33 | 0 |
| typeshed | 0.99978 | 3669 | 20 |
| warehouse | 0.99977 | 654 | 13 |
| zulip | 0.99970 | 1459 | 22 |

fixes: #8162
  • Loading branch information
dhruvmanila committed Oct 24, 2023
1 parent 9feb86c commit 2e81b9c
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@
D, # trailing comment
# leading close bracket comment
] = int # trailing value comment
type type_params_single_comment[ # trailing open bracket comment
A,
B
] = int
type type_params_all_kinds[type_var, *type_var_tuple, **param_spec] = int

# type variable bounds
Expand Down
8 changes: 4 additions & 4 deletions crates/ruff_python_formatter/src/type_param/type_params.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
use ruff_formatter::write;
use ruff_formatter::FormatResult;
use ruff_python_ast::AstNode;
use ruff_python_ast::TypeParams;
use ruff_text_size::Ranged;

use crate::builders::PyFormatterExtensions;
use crate::comments::{trailing_comments, SourceComment};
use crate::comments::SourceComment;
use crate::expression::parentheses::parenthesized;
use crate::prelude::*;

Expand All @@ -24,15 +23,16 @@ impl FormatNodeRule<TypeParams> for FormatTypeParams {
// ] = ...
let comments = f.context().comments().clone();
let dangling_comments = comments.dangling(item.as_any_node_ref());
write!(f, [trailing_comments(dangling_comments)])?;

let items = format_with(|f| {
f.join_comma_separated(item.end())
.nodes(item.type_params.iter())
.finish()
});

parenthesized("[", &items, "]").fmt(f)
parenthesized("[", &items, "]")
.with_dangling_comments(dangling_comments)
.fmt(f)
}

fn fmt_dangling_comments(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,9 @@ f3 = { # f3
# Non-empty parentheses: These are not allowed without a value
def f1[T](): # f1
def f1[ # f1
T
]():
pass
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ type type_params_comments[ # trailing open bracket comment
D, # trailing comment
# leading close bracket comment
] = int # trailing value comment
type type_params_single_comment[ # trailing open bracket comment
A,
B
] = int
type type_params_all_kinds[type_var, *type_var_tuple, **param_spec] = int
# type variable bounds
Expand Down Expand Up @@ -201,6 +205,10 @@ type type_params_comments[ # trailing open bracket comment
D, # trailing comment
# leading close bracket comment
] = int # trailing value comment
type type_params_single_comment[ # trailing open bracket comment
A,
B,
] = int
type type_params_all_kinds[type_var, *type_var_tuple, **param_spec] = int
# type variable bounds
Expand Down

0 comments on commit 2e81b9c

Please sign in to comment.