Skip to content

Commit

Permalink
Class new line between docstrings / vars / methods (#219)
Browse files Browse the repository at this point in the history
Partially addresses #144
  • Loading branch information
Sterbic authored and ambv committed May 29, 2018
1 parent 2ff05f2 commit e818260
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 4 deletions.
28 changes: 28 additions & 0 deletions black.py
Original file line number Diff line number Diff line change
Expand Up @@ -987,6 +987,18 @@ def is_class_paren_empty(self) -> bool:
and self.leaves[3].value == ")"
)

@property
def is_triple_quoted_string(self) -> bool:
"""Is the line a triple quoted docstring?"""
return (
bool(self)
and self.leaves[0].type == token.STRING
and (
self.leaves[0].value.startswith('"""')
or self.leaves[0].value.startswith("'''")
)
)

def contains_standalone_comments(self, depth_limit: int = sys.maxsize) -> bool:
"""If so, needs to be split before emitting."""
for leaf in self.leaves:
Expand Down Expand Up @@ -1194,6 +1206,7 @@ class EmptyLineTracker:
the prefix of the first leaf consists of optional newlines. Those newlines
are consumed by `maybe_empty_lines()` and included in the computation.
"""

is_pyi: bool = False
previous_line: Optional[Line] = None
previous_after: int = 0
Expand Down Expand Up @@ -1244,6 +1257,12 @@ def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
if self.previous_line.is_decorator:
return 0, 0

if (
self.previous_line.is_class
and self.previous_line.depth != current_line.depth
):
return 0, 0

if (
self.previous_line.is_comment
and self.previous_line.depth == current_line.depth
Expand Down Expand Up @@ -1275,6 +1294,13 @@ def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
):
return (before or 1), 0

if (
self.previous_line
and self.previous_line.is_class
and current_line.is_triple_quoted_string
):
return before, 1

return before, 0


Expand All @@ -1285,6 +1311,7 @@ class LineGenerator(Visitor[Line]):
Note: destroys the tree it's visiting by mutating prefixes of its leaves
in ways that will no longer stringify to valid Python code on the tree.
"""

is_pyi: bool = False
current_line: Line = Factory(Line)
remove_u_prefix: bool = False
Expand Down Expand Up @@ -2768,6 +2795,7 @@ def gen_python_files_in_dir(path: Path) -> Iterator[Path]:
@dataclass
class Report:
"""Provides a reformatting counter. Can be rendered with `str(report)`."""

check: bool = False
quiet: bool = False
change_count: int = 0
Expand Down
2 changes: 0 additions & 2 deletions tests/class_blank_parentheses.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ def test_func(self):


class ClassWithEmptyFunc(object):

def func_with_blank_parentheses():
return 5

Expand All @@ -55,7 +54,6 @@ class InsideFunc:


class NormalClass:

def func_for_testing(self, first, second):
sum = first + second
return sum
42 changes: 42 additions & 0 deletions tests/class_methods_new_line.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
class ClassSimplest:
pass
class ClassWithInit:
def __init__(self):
pass
class ClassWithInitAndVars:
cls_var = 100
def __init__(self):
pass
class ClassWithInitAndVarsAndDocstring:
"""Test class"""
cls_var = 100
def __init__(self):
pass


# output


class ClassSimplest:
pass


class ClassWithInit:
def __init__(self):
pass


class ClassWithInitAndVars:
cls_var = 100

def __init__(self):
pass


class ClassWithInitAndVarsAndDocstring:
"""Test class"""

cls_var = 100

def __init__(self):
pass
1 change: 0 additions & 1 deletion tests/comments4.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
class C:

@pytest.mark.parametrize(
("post_data", "message"),
[
Expand Down
1 change: 0 additions & 1 deletion tests/composition.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
class C:

def test(self) -> None:
with patch("black.out", print):
self.assertEqual(
Expand Down
8 changes: 8 additions & 0 deletions tests/test_black.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,14 @@ def test_remove_empty_parentheses_after_class(self) -> None:
black.assert_equivalent(source, actual)
black.assert_stable(source, actual, line_length=ll)

@patch("black.dump_to_file", dump_to_stderr)
def test_new_line_between_class_and_code(self) -> None:
source, expected = read_data("class_methods_new_line")
actual = fs(source)
self.assertFormatEqual(expected, actual)
black.assert_equivalent(source, actual)
black.assert_stable(source, actual, line_length=ll)

def test_report(self) -> None:
report = black.Report()
out_lines = []
Expand Down

0 comments on commit e818260

Please sign in to comment.