Skip to content

Commit

Permalink
Allow empty lines at beginning of blocks (again) (#4060)
Browse files Browse the repository at this point in the history
  • Loading branch information
JelleZijlstra authored Dec 10, 2023
1 parent e7e122e commit 61b529b
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 10 deletions.
2 changes: 2 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
- Standalone form feed characters at the module level are no longer removed (#4021)
- Additional cases of immediately nested tuples, lists, and dictionaries are now
indented less (#4012)
- Allow empty lines at the beginning of all blocks, except immediately before a
docstring (#4060)
- Fix crash in preview mode when using a short `--line-length` (#4086)

### Configuration
Expand Down
14 changes: 5 additions & 9 deletions src/black/lines.py
Original file line number Diff line number Diff line change
Expand Up @@ -689,18 +689,14 @@ def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
return 0, 1
return before, 1

# In preview mode, always allow blank lines, except right before a function
# docstring
is_empty_first_line_ok = (
Preview.allow_empty_first_line_before_new_block_or_comment
in current_line.mode
Preview.allow_empty_first_line_in_block in current_line.mode
and (
# If it's a standalone comment
current_line.leaves[0].type == STANDALONE_COMMENT
# If it opens a new block
or current_line.opens_block
# If it's a triple quote comment (but not at the start of a funcdef)
not is_docstring(current_line.leaves[0])
or (
is_docstring(current_line.leaves[0])
and self.previous_line
self.previous_line
and self.previous_line.leaves[0]
and self.previous_line.leaves[0].parent
and not is_funcdef(self.previous_line.leaves[0].parent)
Expand Down
2 changes: 1 addition & 1 deletion src/black/mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ class Preview(Enum):
accept_raw_docstrings = auto()
fix_power_op_line_length = auto()
hug_parens_with_braces_and_square_brackets = auto()
allow_empty_first_line_before_new_block_or_comment = auto()
allow_empty_first_line_in_block = auto()
single_line_format_skip_with_multiple_comments = auto()
long_case_block_line_splitting = auto()
allow_form_feeds = auto()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,17 @@ def baz():
if x:
a = 123

def quux():

new_line = here


class Cls:

def method(self):

pass

# output

def foo():
Expand Down Expand Up @@ -104,3 +115,14 @@ def baz():
# OK
if x:
a = 123


def quux():

new_line = here


class Cls:
def method(self):

pass
1 change: 1 addition & 0 deletions tests/data/cases/preview_form_feeds.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ def foo():

# form feeds are prohibited inside blocks, or on a line with nonwhitespace
def bar(a=1, b: bool = False):

pass


Expand Down

0 comments on commit 61b529b

Please sign in to comment.