From e3eccf3c264ba07c92c5511090d668c486d28a0d Mon Sep 17 00:00:00 2001 From: Micha Reiser Date: Fri, 8 Dec 2023 12:32:47 +0800 Subject: [PATCH] Fix handling of trailing target comment --- .../test/fixtures/ruff/statement/assign.py | 9 + .../src/statement/stmt_assign.rs | 2 +- .../format@statement__assign.py.snap.new | 173 ++++++++++++++++++ 3 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap.new diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py index 36022ddd7f9798..e70ab7c9a604a4 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py @@ -67,3 +67,12 @@ def main() -> None: db_request.POST["name"] ) )[0] + + +c = b[dddddd, aaaaaa] = ( + a[ + aaaaaaa, + bbbbbbbbbbbbbbbbbbb + ] + # comment +) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx diff --git a/crates/ruff_python_formatter/src/statement/stmt_assign.rs b/crates/ruff_python_formatter/src/statement/stmt_assign.rs index 5044e450bbee05..a183e4e2ada25a 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_assign.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_assign.rs @@ -69,7 +69,7 @@ impl Format> for FormatTargets<'_> { if let Some((first, rest)) = self.targets.split_first() { let comments = f.context().comments(); - let parenthesize = if comments.has_leading(first) { + let parenthesize = if comments.has_leading(first) || comments.has_trailing(first) { ParenthesizeTarget::Always } else if has_own_parentheses(first, f.context()).is_some() { ParenthesizeTarget::Never diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap.new b/crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap.new new file mode 100644 index 00000000000000..451d4b2900b69d --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__assign.py.snap.new @@ -0,0 +1,173 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +assertion_line: 201 +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/assign.py +--- +## Input +```python +# break left hand side +a1akjdshflkjahdslkfjlasfdahjlfds = bakjdshflkjahdslkfjlasfdahjlfds = cakjdshflkjahdslkfjlasfdahjlfds = kjaödkjaföjfahlfdalfhaöfaöfhaöfha = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = 3 + +# join left hand side +a2 = ( + b2 +) = 2 + +# Break the last element +a = asdf = fjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfal = 1 + +aa = [ + bakjdshflkjahdslkfjlasfdahjlfds +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [ + +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [ + # foo +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = ([ +]) = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aaaa = ( # trailing + # comment + bbbbb) = cccccccccccccccc = 3 + +x = ( # comment + [ # comment + a, + b, + c, + ] +) = 1 + + +x = ( + # comment + [ + a, + b, + c, + ] +) = 1 + + +x = ( + [ # comment + a, + b, + c, + ] +) = 1 + +def main() -> None: + if True: + some_very_long_variable_name_abcdefghijk = some_very_long_variable_name_abcdefghijk[ + some_very_long_variable_name_abcdefghijk.some_very_long_attribute_name + == "This is a very long string abcdefghijk" + ] + + organization_application = ( + organization_service.get_organization_applications_by_name( + db_request.POST["name"] + ) + )[0] + + +c = b[dddddd, aaaaaa] = ( + a[ + aaaaaaa, + bbbbbbbbbbbbbbbbbbb + ] + # comment +) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + +## Output +```python +# break left hand side +a1akjdshflkjahdslkfjlasfdahjlfds = ( + bakjdshflkjahdslkfjlasfdahjlfds +) = ( + cakjdshflkjahdslkfjlasfdahjlfds +) = kjaödkjaföjfahlfdalfhaöfaöfhaöfha = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = 3 + +# join left hand side +a2 = b2 = 2 + +# Break the last element +a = ( + asdf +) = ( + fjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfalflaflapamsakjsdhflakjdslfjhalsdljfal +) = 1 + +aa = [ + bakjdshflkjahdslkfjlasfdahjlfds +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [ + # foo +] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aa = [] = dddd = ddd = fkjaödkjaföjfahlfdalfhaöfaöfhaöfha = g = [3] + +aaaa = ( # trailing + # comment + bbbbb +) = cccccccccccccccc = 3 + +x = ( # comment + [ # comment + a, + b, + c, + ] +) = 1 + + +x = ( + # comment + [ + a, + b, + c, + ] +) = 1 + + +x = [ # comment + a, + b, + c, +] = 1 + + +def main() -> None: + if True: + some_very_long_variable_name_abcdefghijk = ( + some_very_long_variable_name_abcdefghijk[ + some_very_long_variable_name_abcdefghijk.some_very_long_attribute_name + == "This is a very long string abcdefghijk" + ] + ) + + organization_application = ( + organization_service.get_organization_applications_by_name( + db_request.POST["name"] + ) + )[0] + + +c = b[dddddd, aaaaaa] = ( + a[aaaaaaa, bbbbbbbbbbbbbbbbbbb] + # comment +) = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + + +