Skip to content

Commit e3eccf3

Browse files
committed
Fix handling of trailing target comment
1 parent a224f19 commit e3eccf3

File tree

3 files changed

+183
-1
lines changed

3 files changed

+183
-1
lines changed

crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py

+9
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,12 @@ def main() -> None:
6767
db_request.POST["name"]
6868
)
6969
)[0]
70+
71+
72+
c = b[dddddd, aaaaaa] = (
73+
a[
74+
aaaaaaa,
75+
bbbbbbbbbbbbbbbbbbb
76+
]
77+
# comment
78+
) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

crates/ruff_python_formatter/src/statement/stmt_assign.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ impl Format<PyFormatContext<'_>> for FormatTargets<'_> {
6969
if let Some((first, rest)) = self.targets.split_first() {
7070
let comments = f.context().comments();
7171

72-
let parenthesize = if comments.has_leading(first) {
72+
let parenthesize = if comments.has_leading(first) || comments.has_trailing(first) {
7373
ParenthesizeTarget::Always
7474
} else if has_own_parentheses(first, f.context()).is_some() {
7575
ParenthesizeTarget::Never
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
---
2+
source: crates/ruff_python_formatter/tests/fixtures.rs
3+
assertion_line: 201
4+
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py
5+
---
6+
## Input
7+
```python
8+
# break left hand side
9+
a1akjdshflkjahdslkfjlasfdahjlfds = bakjdshflkjahdslkfjlasfdahjlfds = cakjdshflkjahdslkfjlasfdahjlfds = kjaödkjaföjfahlfdalfhaöfaöfhaöfha = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = 3
10+
11+
# join left hand side
12+
a2 = (
13+
b2
14+
) = 2
15+
16+
# Break the last element
17+
a = asdf = fjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfal = 1
18+
19+
aa = [
20+
bakjdshflkjahdslkfjlasfdahjlfds
21+
] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
22+
23+
aa = [
24+
25+
] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
26+
27+
aa = [
28+
# foo
29+
] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
30+
31+
aa = ([
32+
]) = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
33+
34+
aaaa = ( # trailing
35+
# comment
36+
bbbbb) = cccccccccccccccc = 3
37+
38+
x = ( # comment
39+
[ # comment
40+
a,
41+
b,
42+
c,
43+
]
44+
) = 1
45+
46+
47+
x = (
48+
# comment
49+
[
50+
a,
51+
b,
52+
c,
53+
]
54+
) = 1
55+
56+
57+
x = (
58+
[ # comment
59+
a,
60+
b,
61+
c,
62+
]
63+
) = 1
64+
65+
def main() -> None:
66+
if True:
67+
some_very_long_variable_name_abcdefghijk = some_very_long_variable_name_abcdefghijk[
68+
some_very_long_variable_name_abcdefghijk.some_very_long_attribute_name
69+
== "This is a very long string abcdefghijk"
70+
]
71+
72+
organization_application = (
73+
organization_service.get_organization_applications_by_name(
74+
db_request.POST["name"]
75+
)
76+
)[0]
77+
78+
79+
c = b[dddddd, aaaaaa] = (
80+
a[
81+
aaaaaaa,
82+
bbbbbbbbbbbbbbbbbbb
83+
]
84+
# comment
85+
) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
86+
```
87+
88+
## Output
89+
```python
90+
# break left hand side
91+
a1akjdshflkjahdslkfjlasfdahjlfds = (
92+
bakjdshflkjahdslkfjlasfdahjlfds
93+
) = (
94+
cakjdshflkjahdslkfjlasfdahjlfds
95+
) = kjaödkjaföjfahlfdalfhaöfaöfhaöfha = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = 3
96+
97+
# join left hand side
98+
a2 = b2 = 2
99+
100+
# Break the last element
101+
a = (
102+
asdf
103+
) = (
104+
fjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfal
105+
) = 1
106+
107+
aa = [
108+
bakjdshflkjahdslkfjlasfdahjlfds
109+
] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
110+
111+
aa = [] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
112+
113+
aa = [
114+
# foo
115+
] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
116+
117+
aa = [] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3]
118+
119+
aaaa = ( # trailing
120+
# comment
121+
bbbbb
122+
) = cccccccccccccccc = 3
123+
124+
x = ( # comment
125+
[ # comment
126+
a,
127+
b,
128+
c,
129+
]
130+
) = 1
131+
132+
133+
x = (
134+
# comment
135+
[
136+
a,
137+
b,
138+
c,
139+
]
140+
) = 1
141+
142+
143+
x = [ # comment
144+
a,
145+
b,
146+
c,
147+
] = 1
148+
149+
150+
def main() -> None:
151+
if True:
152+
some_very_long_variable_name_abcdefghijk = (
153+
some_very_long_variable_name_abcdefghijk[
154+
some_very_long_variable_name_abcdefghijk.some_very_long_attribute_name
155+
== "This is a very long string abcdefghijk"
156+
]
157+
)
158+
159+
organization_application = (
160+
organization_service.get_organization_applications_by_name(
161+
db_request.POST["name"]
162+
)
163+
)[0]
164+
165+
166+
c = b[dddddd, aaaaaa] = (
167+
a[aaaaaaa, bbbbbbbbbbbbbbbbbbb]
168+
# comment
169+
) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
170+
```
171+
172+
173+

0 commit comments

Comments
 (0)