X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/07b1b2f3dd0e4f13dd5df96eb9188f3d02f5726e..e818260f1a223929d8f2056f484b73eaa8687622:/black.py?ds=inline diff --git a/black.py b/black.py index 0aba2c5..7dc6ef8 100644 --- a/black.py +++ b/black.py @@ -162,14 +162,18 @@ class Changed(Enum): @click.option( "--pyi", is_flag=True, - help="Force pyi (stub file) formatting, regardless of file extension.", + help=( + "Consider all input files typing stubs regardless of file extension " + "(useful when piping source on standard input)." + ), ) @click.option( "--py36", is_flag=True, help=( - "Force Python 3.6 mode, even if file doesn't currently use " - "Python 3.6-only syntax." + "Allow using Python 3.6-only syntax on all input files. This will put " + "trailing commas in function signatures and calls also after *args and " + "**kwargs. [default: per-file auto-detection]" ), ) @click.version_option(version=__version__) @@ -967,27 +971,6 @@ class Line: and second_leaf.value == "def" ) - @property - def is_flow_control(self) -> bool: - """Is this line a flow control statement? - - Those are `return`, `raise`, `break`, and `continue`. - """ - return ( - bool(self) - and self.leaves[0].type == token.NAME - and self.leaves[0].value in FLOW_CONTROL - ) - - @property - def is_yield(self) -> bool: - """Is this line a yield statement?""" - return ( - bool(self) - and self.leaves[0].type == token.NAME - and self.leaves[0].value == "yield" - ) - @property def is_class_paren_empty(self) -> bool: """Is this a class with no base classes but using parentheses? @@ -1004,6 +987,18 @@ class Line: 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: @@ -1211,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 @@ -1220,8 +1216,7 @@ class EmptyLineTracker: """Return the number of extra empty lines before and after the `current_line`. This is for separating `def`, `async def` and `class` with extra empty - lines (two on module-level), as well as providing an extra empty line - after flow control keywords to make them more prominent. + lines (two on module-level). """ if isinstance(current_line, UnformattedLines): return 0, 0 @@ -1262,6 +1257,12 @@ class EmptyLineTracker: 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 @@ -1293,6 +1294,13 @@ class EmptyLineTracker: ): 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 @@ -1303,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 @@ -2786,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