From 2f260514f67f154d1c8f59bc9ea899406d8a2cfd Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Langa?= Date: Sat, 31 Mar 2018 23:50:27 -0700 Subject: [PATCH] Ignore `# fmt: off` as inline comment Black cannot currently support this form due to its generator-based nature. This is mostly a problem for existing `# yapf: disable` usage as trailing comment. Fixes #95 --- README.md | 3 +++ black.py | 11 ++++++++++- tests/fmtonoff.py | 24 ++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ff2c917..e557025 100644 --- a/README.md +++ b/README.md @@ -426,6 +426,9 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md). * fixed 18.3a4 regression: don't crash and burn on empty lines with trailing whitespace (#80) +* fixed 18.3a4 regression: `# yapf: disable` usage as trailing comment + would cause Black to not emit the rest of the file (#95) + * when CTRL+C is pressed while formatting many files, Black no longer freaks out with a flurry of asyncio-related exceptions diff --git a/black.py b/black.py index 87e0231..2c61880 100644 --- a/black.py +++ b/black.py @@ -1134,6 +1134,10 @@ class LineGenerator(Visitor[Line]): yield from self.line() yield from self.visit(node) + if node.type == token.ENDMARKER: + # somebody decided not to put a final `# fmt: on` + yield from self.line() + def __attrs_post_init__(self) -> None: """You are in a twisty little maze of passages.""" v = self.visit_stmt @@ -1537,7 +1541,12 @@ def generate_comments(leaf: Leaf) -> Iterator[Leaf]: raise FormatOn(consumed) if comment in {"# fmt: off", "# yapf: disable"}: - raise FormatOff(consumed) + if comment_type == STANDALONE_COMMENT: + raise FormatOff(consumed) + + prev = preceding_leaf(leaf) + if not prev or prev.type in WHITESPACE: # standalone comment in disguise + raise FormatOff(consumed) nlines = 0 diff --git a/tests/fmtonoff.py b/tests/fmtonoff.py index 4bacfcf..16c3925 100644 --- a/tests/fmtonoff.py +++ b/tests/fmtonoff.py @@ -71,6 +71,18 @@ def long_lines(): $ """, re.MULTILINE | re.VERBOSE ) +def single_literal_yapf_disable(): + """Black does not support this.""" + BAZ = { + (1, 2, 3, 4), + (5, 6, 7, 8), + (9, 10, 11, 12), + } # yapf: disable +# fmt: off +# No formatting to the end of the file +l=[1,2,3] +d={'a':1, + 'b':2} # output @@ -175,3 +187,15 @@ def long_lines(): """, re.MULTILINE | re.VERBOSE, ) + + +def single_literal_yapf_disable(): + """Black does not support this.""" + BAZ = {(1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)} # yapf: disable + + +# fmt: off +# No formatting to the end of the file +l=[1,2,3] +d={'a':1, + 'b':2} -- 2.39.2