All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
... 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>
<!-- 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)
- Comments are no longer deleted when a line had spaces removed around power operators
(#2874)
- Fix incorrect handling of `# fmt: skip` on colon `:` lines. (#3148)
- Comments are no longer deleted when a line had spaces removed around power operators
(#2874)
from blib2to3.pgen2 import token
from black.nodes import first_leaf_column, preceding_leaf, container_of
from blib2to3.pgen2 import token
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
LN = Union[Leaf, Node]
# types
LN = Union[Leaf, Node]
# fix for fmt: on in children
if contains_fmt_on_at_column(container, leaf.column, preview=preview):
for child in container.children:
# fix for fmt: on in children
if contains_fmt_on_at_column(container, leaf.column, preview=preview):
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):
return
yield child
if contains_fmt_on_at_column(child, leaf.column, preview=preview):
return
yield child
--- /dev/null
+# 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