Fix optional parentheses being removed within # fmt: off sections

Fixes #224
This commit is contained in:
Łukasz Langa 2018-05-21 15:20:19 -07:00
parent 86e1c36507
commit 808754af18
3 changed files with 23 additions and 3 deletions

View File

@ -659,6 +659,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
* fixed invalid code produced when standalone comments were present in a trailer
that was omitted from line splitting on a large expression (#237)
* fixed optional parentheses being removed within `# fmt: off` sections (#224)
### 18.5b0

View File

@ -1820,7 +1820,7 @@ def is_split_before_delimiter(leaf: Leaf, previous: Leaf = None) -> int:
return 0
def generate_comments(leaf: Leaf) -> Iterator[Leaf]:
def generate_comments(leaf: LN) -> Iterator[Leaf]:
"""Clean the prefix of the `leaf` and generate comments from it, if any.
Comments in lib2to3 are shoved into the whitespace prefix. This happens
@ -2337,6 +2337,11 @@ def normalize_invisible_parens(node: Node, parens_after: Set[str]) -> None:
Standardizes on visible parentheses for single-element tuples, and keeps
existing visible parentheses for other tuples and generator expressions.
"""
try:
list(generate_comments(node))
except FormatOff:
return # This `node` has a prefix with `# fmt: off`, don't mess with parens.
check_lpar = False
for child in list(node.children):
if check_lpar:

View File

@ -50,6 +50,11 @@ def long_lines():
typedargslist.extend(
gen_annotated_params(ast_args.kwonlyargs, ast_args.kw_defaults, parameters, implicit_default=True)
)
# fmt: off
a = (
unnecessary_bracket()
)
# fmt: on
_type_comment_re = re.compile(
r"""
^
@ -69,8 +74,10 @@ def long_lines():
\n?
)
$
""", re.MULTILINE | re.VERBOSE
""", # fmt: off
re.MULTILINE | re.VERBOSE
)
# fmt: on
def single_literal_yapf_disable():
"""Black does not support this."""
BAZ = {
@ -163,6 +170,11 @@ def long_lines():
implicit_default=True,
)
)
# fmt: off
a = (
unnecessary_bracket()
)
# fmt: on
_type_comment_re = re.compile(
r"""
^
@ -182,9 +194,10 @@ def long_lines():
\n?
)
$
""",
""", # fmt: off
re.MULTILINE | re.VERBOSE,
)
# fmt: on
def single_literal_yapf_disable():