Tweak breaking groups for comprehensions (#6321)

## Summary

Fixes some comprehension formatting by avoiding creating the group for
the comprehension itself (so that if it breaks, all parts break on their
own lines, e.g. the `for` and the `if` clauses).

Closes https://github.com/astral-sh/ruff/issues/6063.

## Test Plan

Bunch of new fixtures.
This commit is contained in:
Charlie Marsh 2023-08-04 10:00:54 -04:00 committed by GitHub
parent 99baad12d8
commit 4d47dfd6c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 166 additions and 9 deletions

View file

@ -93,3 +93,19 @@ selected_choices = {
x, aaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaay) in z
}
a = {
k: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
}
a = {
k: [1, 2, 3,]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
}
aaaaaaaaaaaaaaaaaaaaa = {
k: o for o in self.registry.values if o.__class__ is not ModelAdmin
}

View file

@ -31,3 +31,19 @@ len(
a for b in c
# trailing
)
a = (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
)
a = (
[1, 2, 3,]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
)
aaaaaaaaaaaaaaaaaaaaa = (
o for o in self.registry.values if o.__class__ is not ModelAdmin
)

View file

@ -57,3 +57,19 @@ selected_choices = [
# Tuples with BinOp
[i for i in (aaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, ccccccccccccccccccccc)]
[(aaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, ccccccccccccccccccccc) for i in b]
a = [
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
]
a = [
[1, 2, 3,]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
]
aaaaaaaaaaaaaaaaaaaaa = [
o for o in self.registry.values if o.__class__ is not ModelAdmin
]

View file

@ -44,7 +44,7 @@ impl FormatNodeRule<ExprDictComp> for FormatExprDictComp {
space(),
value.format(),
soft_line_break_or_space(),
group(&joined)
&joined
)),
"}"
)]

View file

@ -60,7 +60,7 @@ impl FormatNodeRule<ExprGeneratorExp> for FormatExprGeneratorExp {
leading_comments(dangling),
group(&elt.format()),
soft_line_break_or_space(),
group(&joined),
&joined
]
)
} else {
@ -69,11 +69,11 @@ impl FormatNodeRule<ExprGeneratorExp> for FormatExprGeneratorExp {
[parenthesized_with_dangling_comments(
"(",
dangling,
&format_args!(
&group(&format_args!(
group(&elt.format()),
soft_line_break_or_space(),
group(&joined)
),
&joined
)),
")"
)]
)

View file

@ -38,7 +38,7 @@ impl FormatNodeRule<ExprListComp> for FormatExprListComp {
&group(&format_args![
group(&elt.format()),
soft_line_break_or_space(),
group(&joined)
&joined
]),
"]"
)]

View file

@ -38,7 +38,7 @@ impl FormatNodeRule<ExprSetComp> for FormatExprSetComp {
&group(&format_args!(
group(&elt.format()),
soft_line_break_or_space(),
group(&joined)
&joined
)),
"}"
)]

View file

@ -99,6 +99,22 @@ selected_choices = {
x, aaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaay) in z
}
a = {
k: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
}
a = {
k: [1, 2, 3,]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
}
aaaaaaaaaaaaaaaaaaaaa = {
k: o for o in self.registry.values if o.__class__ is not ModelAdmin
}
```
## Output
@ -251,6 +267,26 @@ selected_choices = {
k: v
for (x, aaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaayaaaay) in z # foo
}
a = {
k: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
}
a = {
k: [
1,
2,
3,
]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
}
aaaaaaaaaaaaaaaaaaaaa = {
k: o for o in self.registry.values if o.__class__ is not ModelAdmin
}
```

View file

@ -37,6 +37,22 @@ len(
a for b in c
# trailing
)
a = (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
)
a = (
[1, 2, 3,]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
)
aaaaaaaaaaaaaaaaaaaaa = (
o for o in self.registry.values if o.__class__ is not ModelAdmin
)
```
## Output
@ -75,6 +91,26 @@ len(
for b in c
# trailing
)
a = (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
)
a = (
[
1,
2,
3,
]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
)
aaaaaaaaaaaaaaaaaaaaa = (
o for o in self.registry.values if o.__class__ is not ModelAdmin
)
```

View file

@ -62,7 +62,24 @@ selected_choices = [
# Tuples with BinOp
[i for i in (aaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, ccccccccccccccccccccc)]
[(aaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, ccccccccccccccccccccc) for i in b]```
[(aaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, ccccccccccccccccccccc) for i in b]
a = [
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
]
a = [
[1, 2, 3,]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
]
aaaaaaaaaaaaaaaaaaaaa = [
o for o in self.registry.values if o.__class__ is not ModelAdmin
]
```
## Output
```py
@ -141,6 +158,26 @@ selected_choices = [
)
for i in b
]
a = [
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
]
a = [
[
1,
2,
3,
]
for f in bbbbbbbbbbbbbbb
if f not in ccccccccccc
]
aaaaaaaaaaaaaaaaaaaaa = [
o for o in self.registry.values if o.__class__ is not ModelAdmin
]
```