Fix an infinite loop when using # fmt: on/off
... (#3158)
... in the middle of an expression or code block by adding a missing return. Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
6ea4eddf93
commit
249c6536c4
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
<!-- Changes that affect Black's stable style -->
|
<!-- Changes that affect Black's stable style -->
|
||||||
|
|
||||||
|
- Fix an infinite loop when using `# fmt: on/off` in the middle of an expression or code
|
||||||
|
block (#3158)
|
||||||
- Fix incorrect handling of `# fmt: skip` on colon `:` lines. (#3148)
|
- Fix incorrect handling of `# fmt: skip` on colon `:` lines. (#3148)
|
||||||
- Comments are no longer deleted when a line had spaces removed around power operators
|
- Comments are no longer deleted when a line had spaces removed around power operators
|
||||||
(#2874)
|
(#2874)
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
from blib2to3.pgen2 import token
|
from blib2to3.pgen2 import token
|
||||||
|
|
||||||
from black.nodes import first_leaf_column, preceding_leaf, container_of
|
from black.nodes import first_leaf_column, preceding_leaf, container_of
|
||||||
from black.nodes import STANDALONE_COMMENT, WHITESPACE
|
from black.nodes import CLOSING_BRACKETS, STANDALONE_COMMENT, WHITESPACE
|
||||||
|
|
||||||
# types
|
# types
|
||||||
LN = Union[Leaf, Node]
|
LN = Union[Leaf, Node]
|
||||||
@ -227,6 +227,14 @@ def generate_ignored_nodes(
|
|||||||
# fix for fmt: on in children
|
# fix for fmt: on in children
|
||||||
if contains_fmt_on_at_column(container, leaf.column, preview=preview):
|
if contains_fmt_on_at_column(container, leaf.column, preview=preview):
|
||||||
for child in container.children:
|
for child in container.children:
|
||||||
|
if isinstance(child, Leaf) and is_fmt_on(child, preview=preview):
|
||||||
|
if child.type in CLOSING_BRACKETS:
|
||||||
|
# This means `# fmt: on` is placed at a different bracket level
|
||||||
|
# than `# fmt: off`. This is an invalid use, but as a courtesy,
|
||||||
|
# we include this closing bracket in the ignored nodes.
|
||||||
|
# The alternative is to fail the formatting.
|
||||||
|
yield child
|
||||||
|
return
|
||||||
if contains_fmt_on_at_column(child, leaf.column, preview=preview):
|
if contains_fmt_on_at_column(child, leaf.column, preview=preview):
|
||||||
return
|
return
|
||||||
yield child
|
yield child
|
||||||
|
36
tests/data/simple_cases/fmtonoff5.py
Normal file
36
tests/data/simple_cases/fmtonoff5.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Regression test for https://github.com/psf/black/issues/3129.
|
||||||
|
setup(
|
||||||
|
entry_points={
|
||||||
|
# fmt: off
|
||||||
|
"console_scripts": [
|
||||||
|
"foo-bar"
|
||||||
|
"=foo.bar.:main",
|
||||||
|
# fmt: on
|
||||||
|
] # Includes an formatted indentation.
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Regression test for https://github.com/psf/black/issues/2015.
|
||||||
|
run(
|
||||||
|
# fmt: off
|
||||||
|
[
|
||||||
|
"ls",
|
||||||
|
"-la",
|
||||||
|
]
|
||||||
|
# fmt: on
|
||||||
|
+ path,
|
||||||
|
check=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Regression test for https://github.com/psf/black/issues/3026.
|
||||||
|
def test_func():
|
||||||
|
# yapf: disable
|
||||||
|
if unformatted( args ):
|
||||||
|
return True
|
||||||
|
# yapf: enable
|
||||||
|
elif b:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
Loading…
Reference in New Issue
Block a user