]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

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.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Fix regression: unexpected parentheses around non-mathematical powers
authorŁukasz Langa <lukasz@langa.pl>
Mon, 28 Oct 2019 13:53:25 +0000 (14:53 +0100)
committerŁukasz Langa <lukasz@langa.pl>
Mon, 28 Oct 2019 13:55:24 +0000 (14:55 +0100)
This was caused by an overly liberal application of parentheses in #909 that
fixed #646.

Fixes #1041

black.py
tests/data/function2.py

index f6f687b8125430898389ac7f54d453cf572e731c..5e357ba307c187cd990b2a69cc08a50ee57a579a 100644 (file)
--- a/black.py
+++ b/black.py
@@ -1717,19 +1717,6 @@ class LineGenerator(Visitor[Line]):
                 self.current_line.append(node)
         yield from super().visit_default(node)
 
                 self.current_line.append(node)
         yield from super().visit_default(node)
 
-    def visit_factor(self, node: Node) -> Iterator[Line]:
-        """Force parentheses between a unary op and a binary power:
-
-        -2 ** 8 -> -(2 ** 8)
-        """
-        child = node.children[1]
-        if child.type == syms.power and len(child.children) == 3:
-            lpar = Leaf(token.LPAR, "(")
-            rpar = Leaf(token.RPAR, ")")
-            index = child.remove() or 0
-            node.insert_child(index, Node(syms.atom, [lpar, child, rpar]))
-        yield from self.visit_default(node)
-
     def visit_INDENT(self, node: Node) -> Iterator[Line]:
         """Increase indentation level, maybe yield a line."""
         # In blib2to3 INDENT never holds comments.
     def visit_INDENT(self, node: Node) -> Iterator[Line]:
         """Increase indentation level, maybe yield a line."""
         # In blib2to3 INDENT never holds comments.
@@ -1829,6 +1816,23 @@ class LineGenerator(Visitor[Line]):
             yield from self.line()
         yield from self.visit_default(leaf)
 
             yield from self.line()
         yield from self.visit_default(leaf)
 
+    def visit_factor(self, node: Node) -> Iterator[Line]:
+        """Force parentheses between a unary op and a binary power:
+
+        -2 ** 8 -> -(2 ** 8)
+        """
+        _operator, operand = node.children
+        if (
+            operand.type == syms.power
+            and len(operand.children) == 3
+            and operand.children[1].type == token.DOUBLESTAR
+        ):
+            lpar = Leaf(token.LPAR, "(")
+            rpar = Leaf(token.RPAR, ")")
+            index = operand.remove() or 0
+            node.insert_child(index, Node(syms.atom, [lpar, operand, rpar]))
+        yield from self.visit_default(node)
+
     def __attrs_post_init__(self) -> None:
         """You are in a twisty little maze of passages."""
         v = self.visit_stmt
     def __attrs_post_init__(self) -> None:
         """You are in a twisty little maze of passages."""
         v = self.visit_stmt
index f57a3f5213a6ad7c900e2c1a70f09d100a7aa8bc..a6773d429cddbeea17ce3a31a8ba1d7030181a35 100644 (file)
@@ -7,9 +7,10 @@ def f(
             result = (
                 CliRunner().invoke(black.main, [str(src1), str(src2), "--diff", "--check"])
             )
             result = (
                 CliRunner().invoke(black.main, [str(src1), str(src2), "--diff", "--check"])
             )
+    limited.append(-limited.pop())  # negate top
     return A(
         very_long_argument_name1=very_long_value_for_the_argument,
     return A(
         very_long_argument_name1=very_long_value_for_the_argument,
-        very_long_argument_name2=very_long_value_for_the_argument,
+        very_long_argument_name2=-very.long.value.for_the_argument,
         **kwargs,
     )
 def g():
         **kwargs,
     )
 def g():
@@ -30,9 +31,10 @@ def f(a, **kwargs,) -> A:
             result = CliRunner().invoke(
                 black.main, [str(src1), str(src2), "--diff", "--check"]
             )
             result = CliRunner().invoke(
                 black.main, [str(src1), str(src2), "--diff", "--check"]
             )
+    limited.append(-limited.pop())  # negate top
     return A(
         very_long_argument_name1=very_long_value_for_the_argument,
     return A(
         very_long_argument_name1=very_long_value_for_the_argument,
-        very_long_argument_name2=very_long_value_for_the_argument,
+        very_long_argument_name2=-very.long.value.for_the_argument,
         **kwargs,
     )
 
         **kwargs,
     )