You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ruff format generally adds two blank lines between a class and a previous commented line.
But it does not if the class is the first line of code of the file.
Not a bug and only a minor inconsistency, but also black does always add two blank lines, so just documenting the behavior here.
Reproducible example
Consider following file ruff_inconsistency.py:
# a = 1 # uncomment to change behavior# commentclassA:
deffoo(self):
pass# commentclassB:
defbar(self):
pass
will format into:
# a = 1 # uncomment to change behavior# commentclassA:
deffoo(self):
pass# commentclassB:
defbar(self):
pass
We can see a single blank line before class A: but two blank lines before class B:.
As a note, black does not exhibit that behavior, and consistently add two blank lines:
## Summary
Given:
```python
# comment
class A:
def foo(self):
pass
```
We need to insert an additional newline between `# comment` and `class
A`. We were missing this handling for the case in which `# comment` is a
leading comment on `class A`, as opposed to a trailing comment of some
preceding statement.
In practice, I think this only applies to the specific case in which a
class or function is the first statement in a module, and there's a
single empty line between a leading comment and that class or function.
If there are no empty lines, then the comment "sticks" to the
definition; if there are two or more, then `leading_comments` will
truncate appropriately. If the class or function is nested, then we only
need one empty line anyway.
Closes#8215.
## Test Plan
No change in similarity.
Before:
| project | similarity index | total files | changed files |
|----------------|------------------:|------------------:|------------------:|
| cpython | 0.75803 | 1799 | 1647 |
| django | 0.99983 | 2772 | 34 |
| home-assistant | 0.99953 | 10596 | 186 |
| poetry | 0.99891 | 317 | 17 |
| transformers | 0.99966 | 2657 | 330 |
| twine | 1.00000 | 33 | 0 |
| typeshed | 0.99978 | 3669 | 20 |
| warehouse | 0.99977 | 654 | 13 |
| zulip | 0.99970 | 1459 | 22 |
After:
| project | similarity index | total files | changed files |
|----------------|------------------:|------------------:|------------------:|
| cpython | 0.75803 | 1799 | 1648 |
| django | 0.99983 | 2772 | 34 |
| home-assistant | 0.99953 | 10596 | 186 |
| poetry | 0.99891 | 317 | 17 |
| transformers | 0.99966 | 2657 | 330 |
| twine | 1.00000 | 33 | 0 |
| typeshed | 0.99978 | 3669 | 20 |
| warehouse | 0.99977 | 654 | 13 |
| zulip | 0.99970 | 1459 | 22 |
ruff format
generally adds two blank lines between a class and a previous commented line.But it does not if the class is the first line of code of the file.
Not a bug and only a minor inconsistency, but also
black
does always add two blank lines, so just documenting the behavior here.Reproducible example
Consider following file
ruff_inconsistency.py
:will format into:
We can see a single blank line before
class A:
but two blank lines beforeclass B:
.As a note,
black
does not exhibit that behavior, and consistently add two blank lines:Versions
The text was updated successfully, but these errors were encountered: