diff --git a/src/black/lines.py b/src/black/lines.py index 0256b305df9..dd91bf898f2 100644 --- a/src/black/lines.py +++ b/src/black/lines.py @@ -606,16 +606,7 @@ def _maybe_empty_lines(self, current_line: Line) -> tuple[int, int]: # noqa: C9 # Consume the first leaf's extra newlines. first_leaf = current_line.leaves[0] before = first_leaf.prefix.count("\n") - before = ( - 1 - if self.previous_line - and 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 - else min(before, max_allowed) - ) + before = min(before, max_allowed) first_leaf.prefix = "" else: before = 0 @@ -680,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 diff --git a/tests/data/cases/preview_import_line_collapse.py b/tests/data/cases/preview_import_line_collapse.py index 8f45f1cabdb..39efd93d7e8 100644 --- a/tests/data/cases/preview_import_line_collapse.py +++ b/tests/data/cases/preview_import_line_collapse.py @@ -18,6 +18,61 @@ 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() + # output @@ -39,3 +94,56 @@ # 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() diff --git a/tests/data/cases/preview_import_line_collapse_3_to_1.py b/tests/data/cases/preview_import_line_collapse_3_to_1.py deleted file mode 100644 index 02b351c1000..00000000000 --- a/tests/data/cases/preview_import_line_collapse_3_to_1.py +++ /dev/null @@ -1,62 +0,0 @@ -# flags: --preview -from middleman.authentication import validate_oauth_token - - - -logger = logging.getLogger(__name__) - - -# case 2 try catch with import after import -import os -import os - - - -try: - import os -except Exception: - pass - - -# case 3 multiple imports -import os -import os - -import os -import os - - - - - -for i in range(10): - print(i) - - -# output - - -from middleman.authentication import validate_oauth_token - -logger = logging.getLogger(__name__) - - -# case 2 try catch with import after import -import os -import os - -try: - import os -except Exception: - pass - - -# case 3 multiple imports -import os -import os - -import os -import os - -for i in range(10): - print(i)