Make sure Black doesn't crash when fmt:off
is used before a closing paren (#4363)
This commit is contained in:
parent
b9c63230b4
commit
9c1fd463e1
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
<!-- Changes that affect Black's stable style -->
|
<!-- Changes that affect Black's stable style -->
|
||||||
|
|
||||||
|
- Fix crash when `# fmt: off` is used before a closing parenthesis or bracket. (#4363)
|
||||||
|
|
||||||
### Preview style
|
### Preview style
|
||||||
|
|
||||||
<!-- Changes that affect Black's preview style -->
|
<!-- Changes that affect Black's preview style -->
|
||||||
|
@ -184,24 +184,24 @@ def convert_one_fmt_off_pair(
|
|||||||
for leaf in node.leaves():
|
for leaf in node.leaves():
|
||||||
previous_consumed = 0
|
previous_consumed = 0
|
||||||
for comment in list_comments(leaf.prefix, is_endmarker=False):
|
for comment in list_comments(leaf.prefix, is_endmarker=False):
|
||||||
should_pass_fmt = comment.value in FMT_OFF or _contains_fmt_skip_comment(
|
is_fmt_off = comment.value in FMT_OFF
|
||||||
comment.value, mode
|
is_fmt_skip = _contains_fmt_skip_comment(comment.value, mode)
|
||||||
)
|
if (not is_fmt_off and not is_fmt_skip) or (
|
||||||
if not should_pass_fmt:
|
# Invalid use when `# fmt: off` is applied before a closing bracket.
|
||||||
|
is_fmt_off
|
||||||
|
and leaf.type in CLOSING_BRACKETS
|
||||||
|
):
|
||||||
previous_consumed = comment.consumed
|
previous_consumed = comment.consumed
|
||||||
continue
|
continue
|
||||||
# We only want standalone comments. If there's no previous leaf or
|
# We only want standalone comments. If there's no previous leaf or
|
||||||
# the previous leaf is indentation, it's a standalone comment in
|
# the previous leaf is indentation, it's a standalone comment in
|
||||||
# disguise.
|
# disguise.
|
||||||
if should_pass_fmt and comment.type != STANDALONE_COMMENT:
|
if comment.type != STANDALONE_COMMENT:
|
||||||
prev = preceding_leaf(leaf)
|
prev = preceding_leaf(leaf)
|
||||||
if prev:
|
if prev:
|
||||||
if comment.value in FMT_OFF and prev.type not in WHITESPACE:
|
if is_fmt_off and prev.type not in WHITESPACE:
|
||||||
continue
|
continue
|
||||||
if (
|
if is_fmt_skip and prev.type in WHITESPACE:
|
||||||
_contains_fmt_skip_comment(comment.value, mode)
|
|
||||||
and prev.type in WHITESPACE
|
|
||||||
):
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
ignored_nodes = list(generate_ignored_nodes(leaf, comment, mode))
|
ignored_nodes = list(generate_ignored_nodes(leaf, comment, mode))
|
||||||
@ -213,7 +213,7 @@ def convert_one_fmt_off_pair(
|
|||||||
prefix = first.prefix
|
prefix = first.prefix
|
||||||
if comment.value in FMT_OFF:
|
if comment.value in FMT_OFF:
|
||||||
first.prefix = prefix[comment.consumed :]
|
first.prefix = prefix[comment.consumed :]
|
||||||
if _contains_fmt_skip_comment(comment.value, mode):
|
if is_fmt_skip:
|
||||||
first.prefix = ""
|
first.prefix = ""
|
||||||
standalone_comment_prefix = prefix
|
standalone_comment_prefix = prefix
|
||||||
else:
|
else:
|
||||||
@ -233,7 +233,7 @@ def convert_one_fmt_off_pair(
|
|||||||
fmt_off_prefix = fmt_off_prefix.split("\n")[-1]
|
fmt_off_prefix = fmt_off_prefix.split("\n")[-1]
|
||||||
standalone_comment_prefix += fmt_off_prefix
|
standalone_comment_prefix += fmt_off_prefix
|
||||||
hidden_value = comment.value + "\n" + hidden_value
|
hidden_value = comment.value + "\n" + hidden_value
|
||||||
if _contains_fmt_skip_comment(comment.value, mode):
|
if is_fmt_skip:
|
||||||
hidden_value += (
|
hidden_value += (
|
||||||
comment.leading_whitespace
|
comment.leading_whitespace
|
||||||
if Preview.no_normalize_fmt_skip_whitespace in mode
|
if Preview.no_normalize_fmt_skip_whitespace in mode
|
||||||
|
13
tests/data/cases/fmtonoff6.py
Normal file
13
tests/data/cases/fmtonoff6.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Regression test for https://github.com/psf/black/issues/2478.
|
||||||
|
def foo():
|
||||||
|
arr = (
|
||||||
|
(3833567325051000, 5, 1, 2, 4229.25, 6, 0),
|
||||||
|
# fmt: off
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Regression test for https://github.com/psf/black/issues/3458.
|
||||||
|
dependencies = {
|
||||||
|
a: b,
|
||||||
|
# fmt: off
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user