Make sure Black doesn't crash when fmt:off is used before a closing paren (#4363)

This commit is contained in:
Yilei Yang 2024-05-15 17:32:27 -07:00 committed by GitHub
parent b9c63230b4
commit 9c1fd463e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 27 additions and 12 deletions

View File

@ -10,6 +10,8 @@
<!-- Changes that affect Black's stable style -->
- Fix crash when `# fmt: off` is used before a closing parenthesis or bracket. (#4363)
### Preview style
<!-- Changes that affect Black's preview style -->

View File

@ -184,24 +184,24 @@ def convert_one_fmt_off_pair(
for leaf in node.leaves():
previous_consumed = 0
for comment in list_comments(leaf.prefix, is_endmarker=False):
should_pass_fmt = comment.value in FMT_OFF or _contains_fmt_skip_comment(
comment.value, mode
)
if not should_pass_fmt:
is_fmt_off = comment.value in FMT_OFF
is_fmt_skip = _contains_fmt_skip_comment(comment.value, mode)
if (not is_fmt_off and not is_fmt_skip) or (
# Invalid use when `# fmt: off` is applied before a closing bracket.
is_fmt_off
and leaf.type in CLOSING_BRACKETS
):
previous_consumed = comment.consumed
continue
# We only want standalone comments. If there's no previous leaf or
# the previous leaf is indentation, it's a standalone comment in
# disguise.
if should_pass_fmt and comment.type != STANDALONE_COMMENT:
if comment.type != STANDALONE_COMMENT:
prev = preceding_leaf(leaf)
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
if (
_contains_fmt_skip_comment(comment.value, mode)
and prev.type in WHITESPACE
):
if is_fmt_skip and prev.type in WHITESPACE:
continue
ignored_nodes = list(generate_ignored_nodes(leaf, comment, mode))
@ -213,7 +213,7 @@ def convert_one_fmt_off_pair(
prefix = first.prefix
if comment.value in FMT_OFF:
first.prefix = prefix[comment.consumed :]
if _contains_fmt_skip_comment(comment.value, mode):
if is_fmt_skip:
first.prefix = ""
standalone_comment_prefix = prefix
else:
@ -233,7 +233,7 @@ def convert_one_fmt_off_pair(
fmt_off_prefix = fmt_off_prefix.split("\n")[-1]
standalone_comment_prefix += fmt_off_prefix
hidden_value = comment.value + "\n" + hidden_value
if _contains_fmt_skip_comment(comment.value, mode):
if is_fmt_skip:
hidden_value += (
comment.leading_whitespace
if Preview.no_normalize_fmt_skip_whitespace in mode

View 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
}