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 @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 "..."?""" """Is this line a class definition with a body consisting only of "..."?"""
return ( return (
self.is_class 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: if self.previous_line.depth > current_line.depth:
newlines = 1 newlines = 1
elif current_line.is_class or self.previous_line.is_class: elif current_line.is_class or self.previous_line.is_class:
if ( if current_line.is_stub_class and self.previous_line.is_stub_class:
current_line.is_trivial_class
and self.previous_line.is_trivial_class
):
newlines = 0 newlines = 0
else: else:
newlines = 1 newlines = 1
@ -1329,51 +1326,16 @@ def visit_stmt(
def visit_suite(self, node: Node) -> Iterator[Line]: def visit_suite(self, node: Node) -> Iterator[Line]:
"""Visit a suite.""" """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]) yield from self.visit(node.children[2])
else: else:
yield from self.visit_default(node) 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]: def visit_simple_stmt(self, node: Node) -> Iterator[Line]:
"""Visit a statement without nested statements.""" """Visit a statement without nested statements."""
is_suite_like = node.parent and node.parent.type in STATEMENT is_suite_like = node.parent and node.parent.type in STATEMENT
if is_suite_like: 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) yield from self.visit_default(node)
else: else:
yield from self.line(+1) yield from self.line(+1)
@ -1381,11 +1343,7 @@ def visit_simple_stmt(self, node: Node) -> Iterator[Line]:
yield from self.line(-1) yield from self.line(-1)
else: else:
if ( if not self.is_pyi or not node.parent or not is_stub_suite(node.parent):
not self.is_pyi
or not node.parent
or not self.is_trivial_suite(node.parent)
):
yield from self.line() yield from self.line()
yield from self.visit_default(node) yield from self.visit_default(node)
@ -2474,6 +2432,35 @@ def is_vararg(leaf: Leaf, within: Set[NodeType]) -> bool:
return p.type in within 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: def max_delimiter_priority_in_atom(node: LN) -> int:
"""Return maximum delimiter priority inside `node`. """Return maximum delimiter priority inside `node`.

View File

@ -12,10 +12,6 @@ Assertions and checks
.. autofunction:: black.assert_stable .. autofunction:: black.assert_stable
.. autofunction:: black.is_split_after_delimiter
.. autofunction:: black.is_split_before_delimiter
.. autofunction:: black.is_empty_tuple .. autofunction:: black.is_empty_tuple
.. autofunction:: black.is_import .. autofunction:: black.is_import
@ -26,6 +22,14 @@ Assertions and checks
.. autofunction:: black.is_python36 .. 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 .. autofunction:: black.is_vararg
Formatting Formatting