mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-28 12:55:05 +00:00

**Summary** Prepare for the black preview style becoming the black stable style at the end of the year. This adds a new test file to compare stable and preview on some relevant preview options in black, and makes `format_dev` understand the black preview flag. I've added poetry as a project that uses preview. I've implemented one specific deviation (collapsing of stub implementation in non-stub files) which showed up in poetry for testing. This also improves poetry compatibility from 0.99891 to 0.99919. Fixes #7440 New compatibility stats: | project | similarity index | total files | changed files | |----------------|------------------:|------------------:|------------------:| | cpython | 0.75803 | 1799 | 1647 | | django | 0.99983 | 2772 | 35 | | home-assistant | 0.99953 | 10596 | 189 | | poetry | 0.99919 | 317 | 12 | | transformers | 0.99963 | 2657 | 332 | | twine | 1.00000 | 33 | 0 | | typeshed | 0.99978 | 3669 | 20 | | warehouse | 0.99969 | 654 | 15 | | zulip | 0.99970 | 1459 | 22 |
575 lines
5.5 KiB
Text
575 lines
5.5 KiB
Text
---
|
|
source: crates/ruff_python_formatter/tests/fixtures.rs
|
|
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/newlines.py
|
|
---
|
|
## Input
|
|
```py
|
|
###
|
|
# Blank lines around functions
|
|
###
|
|
import sys
|
|
|
|
x = 1
|
|
|
|
# comment
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
if True:
|
|
x = 1
|
|
|
|
# comment
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
|
|
|
|
# comment
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
|
|
|
|
# comment
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
# comment
|
|
|
|
# comment
|
|
def f():
|
|
pass
|
|
|
|
x = 1
|
|
|
|
# comment
|
|
# comment
|
|
|
|
def f():
|
|
pass
|
|
|
|
x = 1
|
|
|
|
# comment
|
|
# comment
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
|
|
# comment
|
|
|
|
|
|
|
|
# comment
|
|
|
|
|
|
|
|
def f():
|
|
pass
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
# comment
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
# comment
|
|
|
|
###
|
|
# Blank lines around imports.
|
|
###
|
|
|
|
def f():
|
|
import x
|
|
# comment
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
|
|
# comment
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
# comment
|
|
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
# comment
|
|
|
|
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
|
|
|
|
# comment
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
|
|
# comment
|
|
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x # comment
|
|
# comment
|
|
|
|
import y
|
|
|
|
|
|
def f(): pass # comment
|
|
# comment
|
|
|
|
x = 1
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
|
|
|
|
# comment
|
|
|
|
x = 1
|
|
|
|
|
|
def f():
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
print("below function")
|
|
if True:
|
|
|
|
class A:
|
|
x = 1
|
|
print("below class")
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
#
|
|
print("below comment function")
|
|
if True:
|
|
|
|
class A:
|
|
x = 1
|
|
#
|
|
print("below comment class")
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
#
|
|
print("below comment function 2")
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
#
|
|
def outer():
|
|
def inner():
|
|
pass
|
|
print("below nested functions")
|
|
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
print("below function")
|
|
if True:
|
|
|
|
class A:
|
|
x = 1
|
|
print("below class")
|
|
def outer():
|
|
def inner():
|
|
pass
|
|
print("below nested functions")
|
|
|
|
|
|
class Path:
|
|
if sys.version_info >= (3, 11):
|
|
def joinpath(self): ...
|
|
|
|
# The .open method comes from pathlib.pyi and should be kept in sync.
|
|
@overload
|
|
def open(self): ...
|
|
|
|
|
|
|
|
|
|
def fakehttp():
|
|
|
|
class FakeHTTPConnection:
|
|
if mock_close:
|
|
def close(self):
|
|
pass
|
|
FakeHTTPConnection.fakedata = fakedata
|
|
|
|
|
|
|
|
|
|
|
|
if True:
|
|
if False:
|
|
def x():
|
|
def y():
|
|
pass
|
|
#comment
|
|
print()
|
|
|
|
|
|
# NOTE: Please keep this the last block in this file. This tests that we don't insert
|
|
# empty line(s) at the end of the file due to nested function
|
|
if True:
|
|
def nested_trailing_function():
|
|
pass```
|
|
|
|
## Output
|
|
```py
|
|
###
|
|
# Blank lines around functions
|
|
###
|
|
import sys
|
|
|
|
x = 1
|
|
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
if True:
|
|
x = 1
|
|
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
|
|
# comment
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
# comment
|
|
|
|
|
|
# comment
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
# comment
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
|
|
# comment
|
|
# comment
|
|
def f():
|
|
pass
|
|
|
|
|
|
x = 1
|
|
|
|
|
|
# comment
|
|
|
|
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
# comment
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
# comment
|
|
|
|
###
|
|
# Blank lines around imports.
|
|
###
|
|
|
|
|
|
def f():
|
|
import x
|
|
|
|
# comment
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
|
|
# comment
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
# comment
|
|
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
# comment
|
|
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
|
|
# comment
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x
|
|
|
|
# comment
|
|
|
|
import y
|
|
|
|
|
|
def f():
|
|
import x # comment
|
|
# comment
|
|
|
|
import y
|
|
|
|
|
|
def f():
|
|
pass # comment
|
|
|
|
|
|
# comment
|
|
|
|
x = 1
|
|
|
|
|
|
def f():
|
|
pass
|
|
|
|
|
|
# comment
|
|
|
|
x = 1
|
|
|
|
|
|
def f():
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
|
|
print("below function")
|
|
if True:
|
|
|
|
class A:
|
|
x = 1
|
|
|
|
print("below class")
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
|
|
#
|
|
print("below comment function")
|
|
if True:
|
|
|
|
class A:
|
|
x = 1
|
|
|
|
#
|
|
print("below comment class")
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
|
|
#
|
|
print("below comment function 2")
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
#
|
|
|
|
def outer():
|
|
def inner():
|
|
pass
|
|
|
|
print("below nested functions")
|
|
|
|
|
|
if True:
|
|
|
|
def double(s):
|
|
return s + s
|
|
|
|
|
|
print("below function")
|
|
if True:
|
|
|
|
class A:
|
|
x = 1
|
|
|
|
|
|
print("below class")
|
|
|
|
|
|
def outer():
|
|
def inner():
|
|
pass
|
|
|
|
|
|
print("below nested functions")
|
|
|
|
|
|
class Path:
|
|
if sys.version_info >= (3, 11):
|
|
|
|
def joinpath(self):
|
|
...
|
|
|
|
# The .open method comes from pathlib.pyi and should be kept in sync.
|
|
@overload
|
|
def open(self):
|
|
...
|
|
|
|
|
|
def fakehttp():
|
|
class FakeHTTPConnection:
|
|
if mock_close:
|
|
|
|
def close(self):
|
|
pass
|
|
|
|
FakeHTTPConnection.fakedata = fakedata
|
|
|
|
|
|
if True:
|
|
if False:
|
|
|
|
def x():
|
|
def y():
|
|
pass
|
|
|
|
# comment
|
|
print()
|
|
|
|
|
|
# NOTE: Please keep this the last block in this file. This tests that we don't insert
|
|
# empty line(s) at the end of the file due to nested function
|
|
if True:
|
|
|
|
def nested_trailing_function():
|
|
pass
|
|
```
|
|
|
|
|
|
## Preview changes
|
|
```diff
|
|
--- Stable
|
|
+++ Preview
|
|
@@ -245,13 +245,11 @@
|
|
class Path:
|
|
if sys.version_info >= (3, 11):
|
|
|
|
- def joinpath(self):
|
|
- ...
|
|
+ def joinpath(self): ...
|
|
|
|
# The .open method comes from pathlib.pyi and should be kept in sync.
|
|
@overload
|
|
- def open(self):
|
|
- ...
|
|
+ def open(self): ...
|
|
|
|
|
|
def fakehttp():
|
|
```
|
|
|
|
|
|
|