--- source: crates/ruff_python_formatter/tests/fixtures.rs input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/comments5.py --- ## Input ```py while True: if something.changed: do.stuff() # trailing comment # Comment belongs to the `if` block. # This one belongs to the `while` block. # Should this one, too? I guess so. # This one is properly standalone now. for i in range(100): # first we do this if i % 33 == 0: break # then we do this print(i) # and finally we loop around with open(some_temp_file) as f: data = f.read() try: with open(some_other_file) as w: w.write(data) except OSError: print("problems") import sys # leading function comment def wat(): ... # trailing function comment # SECTION COMMENT # leading 1 @deco1 # leading 2 @deco2(with_args=True) # leading 3 @deco3 def decorated1(): ... # leading 1 @deco1 # leading 2 @deco2(with_args=True) # leading function comment def decorated1(): ... # Note: this is fixed in # Preview.empty_lines_before_class_or_def_with_leading_comments. # In the current style, the user will have to split those lines by hand. some_instruction # This comment should be split from `some_instruction` by two lines but isn't. def g(): ... if __name__ == "__main__": main() ``` ## Black Differences ```diff --- Black +++ Ruff @@ -1,6 +1,6 @@ while True: if something.changed: - do.stuff() # trailing comment + NOT_IMPLEMENTED_call() # trailing comment # Comment belongs to the `if` block. # This one belongs to the `while` block. @@ -8,26 +8,21 @@ # This one is properly standalone now. -for i in range(100): +for i in NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg): # first we do this if i % 33 == 0: break # then we do this - print(i) + NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) # and finally we loop around -with open(some_temp_file) as f: - data = f.read() - -try: - with open(some_other_file) as w: - w.write(data) +with NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) as f: + data = NOT_IMPLEMENTED_call() -except OSError: - print("problems") +NOT_YET_IMPLEMENTED_StmtTry -import sys +NOT_YET_IMPLEMENTED_StmtImport # leading function comment @@ -42,7 +37,7 @@ # leading 1 @deco1 # leading 2 -@deco2(with_args=True) +@NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) # leading 3 @deco3 def decorated1(): @@ -52,7 +47,7 @@ # leading 1 @deco1 # leading 2 -@deco2(with_args=True) +@NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) # leading function comment def decorated1(): ... @@ -70,4 +65,4 @@ if __name__ == "__main__": - main() + NOT_IMPLEMENTED_call() ``` ## Ruff Output ```py while True: if something.changed: NOT_IMPLEMENTED_call() # trailing comment # Comment belongs to the `if` block. # This one belongs to the `while` block. # Should this one, too? I guess so. # This one is properly standalone now. for i in NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg): # first we do this if i % 33 == 0: break # then we do this NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) # and finally we loop around with NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) as f: data = NOT_IMPLEMENTED_call() NOT_YET_IMPLEMENTED_StmtTry NOT_YET_IMPLEMENTED_StmtImport # leading function comment def wat(): ... # trailing function comment # SECTION COMMENT # leading 1 @deco1 # leading 2 @NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) # leading 3 @deco3 def decorated1(): ... # leading 1 @deco1 # leading 2 @NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg) # leading function comment def decorated1(): ... # Note: this is fixed in # Preview.empty_lines_before_class_or_def_with_leading_comments. # In the current style, the user will have to split those lines by hand. some_instruction # This comment should be split from `some_instruction` by two lines but isn't. def g(): ... if __name__ == "__main__": NOT_IMPLEMENTED_call() ``` ## Black Output ```py while True: if something.changed: do.stuff() # trailing comment # Comment belongs to the `if` block. # This one belongs to the `while` block. # Should this one, too? I guess so. # This one is properly standalone now. for i in range(100): # first we do this if i % 33 == 0: break # then we do this print(i) # and finally we loop around with open(some_temp_file) as f: data = f.read() try: with open(some_other_file) as w: w.write(data) except OSError: print("problems") import sys # leading function comment def wat(): ... # trailing function comment # SECTION COMMENT # leading 1 @deco1 # leading 2 @deco2(with_args=True) # leading 3 @deco3 def decorated1(): ... # leading 1 @deco1 # leading 2 @deco2(with_args=True) # leading function comment def decorated1(): ... # Note: this is fixed in # Preview.empty_lines_before_class_or_def_with_leading_comments. # In the current style, the user will have to split those lines by hand. some_instruction # This comment should be split from `some_instruction` by two lines but isn't. def g(): ... if __name__ == "__main__": main() ```