Simplify is_trivial_* methods

This commit is contained in:
Łukasz Langa 2018-05-15 13:25:00 -07:00
parent 2b3206dc23
commit 8b64e916f6
2 changed files with 42 additions and 51 deletions

View File

@ -841,7 +841,7 @@ def is_class(self) -> bool:
)
@property
def is_trivial_class(self) -> bool:
def is_stub_class(self) -> bool:
"""Is this line a class definition with a body consisting only of "..."?"""
return (
self.is_class
@ -1177,10 +1177,7 @@ def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
if self.previous_line.depth > current_line.depth:
newlines = 1
elif current_line.is_class or self.previous_line.is_class:
if (
current_line.is_trivial_class
and self.previous_line.is_trivial_class
):
if current_line.is_stub_class and self.previous_line.is_stub_class:
newlines = 0
else:
newlines = 1
@ -1329,51 +1326,16 @@ def visit_stmt(
def visit_suite(self, node: Node) -> Iterator[Line]:
"""Visit a suite."""
if self.is_pyi and self.is_trivial_suite(node):
if self.is_pyi and is_stub_suite(node):
yield from self.visit(node.children[2])
else:
yield from self.visit_default(node)
def is_trivial_suite(self, node: Node) -> bool:
if len(node.children) != 4:
return False
if (
not isinstance(node.children[0], Leaf)
or node.children[0].type != token.NEWLINE
):
return False
if (
not isinstance(node.children[1], Leaf)
or node.children[1].type != token.INDENT
):
return False
if (
not isinstance(node.children[3], Leaf)
or node.children[3].type != token.DEDENT
):
return False
stmt = node.children[2]
if not isinstance(stmt, Node):
return False
return self.is_trivial_body(stmt)
def is_trivial_body(self, stmt: Node) -> bool:
if not isinstance(stmt, Node) or stmt.type != syms.simple_stmt:
return False
if len(stmt.children) != 2:
return False
child = stmt.children[0]
return (
child.type == syms.atom
and len(child.children) == 3
and all(leaf == Leaf(token.DOT, ".") for leaf in child.children)
)
def visit_simple_stmt(self, node: Node) -> Iterator[Line]:
"""Visit a statement without nested statements."""
is_suite_like = node.parent and node.parent.type in STATEMENT
if is_suite_like:
if self.is_pyi and self.is_trivial_body(node):
if self.is_pyi and is_stub_body(node):
yield from self.visit_default(node)
else:
yield from self.line(+1)
@ -1381,11 +1343,7 @@ def visit_simple_stmt(self, node: Node) -> Iterator[Line]:
yield from self.line(-1)
else:
if (
not self.is_pyi
or not node.parent
or not self.is_trivial_suite(node.parent)
):
if not self.is_pyi or not node.parent or not is_stub_suite(node.parent):
yield from self.line()
yield from self.visit_default(node)
@ -2474,6 +2432,35 @@ def is_vararg(leaf: Leaf, within: Set[NodeType]) -> bool:
return p.type in within
def is_stub_suite(node: Node) -> bool:
"""Return True if `node` is a suite with a stub body."""
if (
len(node.children) != 4
or node.children[0].type != token.NEWLINE
or node.children[1].type != token.INDENT
or node.children[3].type != token.DEDENT
):
return False
return is_stub_body(node.children[2])
def is_stub_body(node: LN) -> bool:
"""Return True if `node` is a simple statement containing an ellipsis."""
if not isinstance(node, Node) or node.type != syms.simple_stmt:
return False
if len(node.children) != 2:
return False
child = node.children[0]
return (
child.type == syms.atom
and len(child.children) == 3
and all(leaf == Leaf(token.DOT, ".") for leaf in child.children)
)
def max_delimiter_priority_in_atom(node: LN) -> int:
"""Return maximum delimiter priority inside `node`.

View File

@ -12,10 +12,6 @@ Assertions and checks
.. autofunction:: black.assert_stable
.. autofunction:: black.is_split_after_delimiter
.. autofunction:: black.is_split_before_delimiter
.. autofunction:: black.is_empty_tuple
.. autofunction:: black.is_import
@ -26,6 +22,14 @@ Assertions and checks
.. autofunction:: black.is_python36
.. autofunction:: black.is_split_after_delimiter
.. autofunction:: black.is_split_before_delimiter
.. autofunction:: black.is_stub_body
.. autofunction:: black.is_stub_suite
.. autofunction:: black.is_vararg
Formatting