Two blank lines after an import should be reduced to one (#4489)
Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
96ca1b6be3
commit
e54f86bae4
@ -18,6 +18,7 @@
|
||||
<!-- Changes that affect Black's preview style -->
|
||||
|
||||
- Remove parentheses around sole list items (#4312)
|
||||
- Collapse multiple empty lines after an import into one (#4489)
|
||||
|
||||
### Configuration
|
||||
|
||||
|
@ -41,6 +41,8 @@ Currently, the following features are included in the preview style:
|
||||
- `remove_lone_list_item_parens`: remove redundant parentheses around lone list items
|
||||
(depends on unstable `hug_parens_with_braces_and_square_brackets` feature in some
|
||||
cases)
|
||||
- `always_one_newline_after_import`: Always force one blank line after import
|
||||
statements, except when the line after the import is a comment or an import statement
|
||||
|
||||
(labels/unstable-features)=
|
||||
|
||||
|
@ -671,6 +671,15 @@ def _maybe_empty_lines(self, current_line: Line) -> tuple[int, int]: # noqa: C9
|
||||
current_line, before, user_had_newline
|
||||
)
|
||||
|
||||
if (
|
||||
self.previous_line.is_import
|
||||
and self.previous_line.depth == 0
|
||||
and current_line.depth == 0
|
||||
and not current_line.is_import
|
||||
and Preview.always_one_newline_after_import in self.mode
|
||||
):
|
||||
return 1, 0
|
||||
|
||||
if (
|
||||
self.previous_line.is_import
|
||||
and not current_line.is_import
|
||||
|
@ -214,6 +214,7 @@ class Preview(Enum):
|
||||
# hug_parens_with_braces_and_square_brackets to remove parens in some cases
|
||||
remove_lone_list_item_parens = auto()
|
||||
pep646_typed_star_arg_type_var_tuple = auto()
|
||||
always_one_newline_after_import = auto()
|
||||
|
||||
|
||||
UNSTABLE_FEATURES: set[Preview] = {
|
||||
|
@ -92,7 +92,8 @@
|
||||
"remove_redundant_guard_parens",
|
||||
"parens_for_long_if_clauses_in_case_block",
|
||||
"remove_lone_list_item_parens",
|
||||
"pep646_typed_star_arg_type_var_tuple"
|
||||
"pep646_typed_star_arg_type_var_tuple",
|
||||
"always_one_newline_after_import"
|
||||
]
|
||||
},
|
||||
"description": "Enable specific features included in the `--unstable` style. Requires `--preview`. No compatibility guarantees are provided on the behavior or existence of any unstable features."
|
||||
|
@ -177,7 +177,6 @@ def test_fails_invalid_post_data(
|
||||
MyLovelyCompanyTeamProjectComponent as component, # DRY
|
||||
)
|
||||
|
||||
|
||||
result = 1 # look ma, no comment migration xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
||||
result = 1 # look ma, no comment migration xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
|
180
tests/data/cases/preview_import_line_collapse.py
Normal file
180
tests/data/cases/preview_import_line_collapse.py
Normal file
@ -0,0 +1,180 @@
|
||||
# flags: --preview
|
||||
from middleman.authentication import validate_oauth_token
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# case 2 comment after import
|
||||
from middleman.authentication import validate_oauth_token
|
||||
#comment
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# case 3 comment after import
|
||||
from middleman.authentication import validate_oauth_token
|
||||
# comment
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
from middleman.authentication import validate_oauth_token
|
||||
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# case 4 try catch with import after import
|
||||
import os
|
||||
import os
|
||||
|
||||
|
||||
|
||||
try:
|
||||
import os
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
import os
|
||||
def func():
|
||||
a = 1
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
# case 5 multiple imports
|
||||
import os
|
||||
import os
|
||||
|
||||
import os
|
||||
import os
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
for i in range(10):
|
||||
print(i)
|
||||
|
||||
|
||||
# case 6 import in function
|
||||
def func():
|
||||
print()
|
||||
import os
|
||||
def func():
|
||||
pass
|
||||
print()
|
||||
|
||||
|
||||
def func():
|
||||
import os
|
||||
a = 1
|
||||
print()
|
||||
|
||||
|
||||
def func():
|
||||
import os
|
||||
|
||||
|
||||
a = 1
|
||||
print()
|
||||
|
||||
|
||||
def func():
|
||||
import os
|
||||
|
||||
|
||||
|
||||
a = 1
|
||||
print()
|
||||
|
||||
# output
|
||||
|
||||
|
||||
from middleman.authentication import validate_oauth_token
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# case 2 comment after import
|
||||
from middleman.authentication import validate_oauth_token
|
||||
|
||||
# comment
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# case 3 comment after import
|
||||
from middleman.authentication import validate_oauth_token
|
||||
|
||||
# comment
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
from middleman.authentication import validate_oauth_token
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# case 4 try catch with import after import
|
||||
import os
|
||||
import os
|
||||
|
||||
try:
|
||||
import os
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
import os
|
||||
|
||||
def func():
|
||||
a = 1
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
# case 5 multiple imports
|
||||
import os
|
||||
import os
|
||||
|
||||
import os
|
||||
import os
|
||||
|
||||
for i in range(10):
|
||||
print(i)
|
||||
|
||||
|
||||
# case 6 import in function
|
||||
def func():
|
||||
print()
|
||||
import os
|
||||
|
||||
def func():
|
||||
pass
|
||||
|
||||
print()
|
||||
|
||||
|
||||
def func():
|
||||
import os
|
||||
|
||||
a = 1
|
||||
print()
|
||||
|
||||
|
||||
def func():
|
||||
import os
|
||||
|
||||
a = 1
|
||||
print()
|
||||
|
||||
|
||||
def func():
|
||||
import os
|
||||
|
||||
a = 1
|
||||
print()
|
Loading…
Reference in New Issue
Block a user