Skip to content

Commit

Permalink
Remove blank lines before class docstring (#3692)
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathanberthias authored May 18, 2023
1 parent db3668a commit 2fd9d8b
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

- Implicitly concatenated strings used as function args are no longer wrapped inside
parentheses (#3640)
- Remove blank lines between a class definition and its docstring (#3692)

### Configuration

Expand Down
2 changes: 2 additions & 0 deletions src/black/lines.py
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,8 @@ def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
and self.previous_line.is_class
and current_line.is_triple_quoted_string
):
if Preview.no_blank_line_before_class_docstring in current_line.mode:
return 0, 1
return before, 1

if self.previous_line and self.previous_line.opens_block:
Expand Down
1 change: 1 addition & 0 deletions src/black/mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ class Preview(Enum):
hex_codes_in_unicode_sequences = auto()
improved_async_statements_handling = auto()
multiline_string_handling = auto()
no_blank_line_before_class_docstring = auto()
prefer_splitting_right_hand_side_of_assignments = auto()
# NOTE: string_processing requires wrap_long_dict_values_in_parens
# for https://github.com/psf/black/issues/3117 to be fixed.
Expand Down
58 changes: 58 additions & 0 deletions tests/data/preview/no_blank_line_before_docstring.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
def line_before_docstring():

"""Please move me up"""


class LineBeforeDocstring:

"""Please move me up"""


class EvenIfThereIsAMethodAfter:

"""I'm the docstring"""
def method(self):
pass


class TwoLinesBeforeDocstring:


"""I want to be treated the same as if I were closer"""


class MultilineDocstringsAsWell:

"""I'm so far
and on so many lines...
"""


# output


def line_before_docstring():
"""Please move me up"""


class LineBeforeDocstring:
"""Please move me up"""


class EvenIfThereIsAMethodAfter:
"""I'm the docstring"""

def method(self):
pass


class TwoLinesBeforeDocstring:
"""I want to be treated the same as if I were closer"""


class MultilineDocstringsAsWell:
"""I'm so far
and on so many lines...
"""

0 comments on commit 2fd9d8b

Please sign in to comment.