Always move the prefix out when wrapping with parentheses (#1103)
Fixes #1097
This commit is contained in:
parent
32009775e5
commit
f99fad1b78
39
black.py
39
black.py
@ -2966,16 +2966,9 @@ def normalize_invisible_parens(node: Node, parens_after: Set[str]) -> None:
|
|||||||
|
|
||||||
if child.type == syms.atom:
|
if child.type == syms.atom:
|
||||||
if maybe_make_parens_invisible_in_atom(child, parent=node):
|
if maybe_make_parens_invisible_in_atom(child, parent=node):
|
||||||
lpar = Leaf(token.LPAR, "")
|
wrap_in_parentheses(node, child, visible=False)
|
||||||
rpar = Leaf(token.RPAR, "")
|
|
||||||
index = child.remove() or 0
|
|
||||||
node.insert_child(index, Node(syms.atom, [lpar, child, rpar]))
|
|
||||||
elif is_one_tuple(child):
|
elif is_one_tuple(child):
|
||||||
# wrap child in visible parentheses
|
wrap_in_parentheses(node, child, visible=True)
|
||||||
lpar = Leaf(token.LPAR, "(")
|
|
||||||
rpar = Leaf(token.RPAR, ")")
|
|
||||||
child.remove()
|
|
||||||
node.insert_child(index, Node(syms.atom, [lpar, child, rpar]))
|
|
||||||
elif node.type == syms.import_from:
|
elif node.type == syms.import_from:
|
||||||
# "import from" nodes store parentheses directly as part of
|
# "import from" nodes store parentheses directly as part of
|
||||||
# the statement
|
# the statement
|
||||||
@ -2990,15 +2983,7 @@ def normalize_invisible_parens(node: Node, parens_after: Set[str]) -> None:
|
|||||||
break
|
break
|
||||||
|
|
||||||
elif not (isinstance(child, Leaf) and is_multiline_string(child)):
|
elif not (isinstance(child, Leaf) and is_multiline_string(child)):
|
||||||
# wrap child in invisible parentheses
|
wrap_in_parentheses(node, child, visible=False)
|
||||||
lpar = Leaf(token.LPAR, "")
|
|
||||||
rpar = Leaf(token.RPAR, "")
|
|
||||||
index = child.remove() or 0
|
|
||||||
prefix = child.prefix
|
|
||||||
child.prefix = ""
|
|
||||||
new_child = Node(syms.atom, [lpar, child, rpar])
|
|
||||||
new_child.prefix = prefix
|
|
||||||
node.insert_child(index, new_child)
|
|
||||||
|
|
||||||
check_lpar = isinstance(child, Leaf) and child.value in parens_after
|
check_lpar = isinstance(child, Leaf) and child.value in parens_after
|
||||||
|
|
||||||
@ -3158,6 +3143,24 @@ def unwrap_singleton_parenthesis(node: LN) -> Optional[LN]:
|
|||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
|
||||||
|
def wrap_in_parentheses(parent: Node, child: LN, *, visible: bool = True) -> None:
|
||||||
|
"""Wrap `child` in parentheses.
|
||||||
|
|
||||||
|
This replaces `child` with an atom holding the parentheses and the old
|
||||||
|
child. That requires moving the prefix.
|
||||||
|
|
||||||
|
If `visible` is False, the leaves will be valueless (and thus invisible).
|
||||||
|
"""
|
||||||
|
lpar = Leaf(token.LPAR, "(" if visible else "")
|
||||||
|
rpar = Leaf(token.RPAR, ")" if visible else "")
|
||||||
|
prefix = child.prefix
|
||||||
|
child.prefix = ""
|
||||||
|
index = child.remove() or 0
|
||||||
|
new_child = Node(syms.atom, [lpar, child, rpar])
|
||||||
|
new_child.prefix = prefix
|
||||||
|
parent.insert_child(index, new_child)
|
||||||
|
|
||||||
|
|
||||||
def is_one_tuple(node: LN) -> bool:
|
def is_one_tuple(node: LN) -> bool:
|
||||||
"""Return True if `node` holds a tuple with one element, with or without parens."""
|
"""Return True if `node` holds a tuple with one element, with or without parens."""
|
||||||
if node.type == syms.atom:
|
if node.type == syms.atom:
|
||||||
|
@ -1,10 +1,23 @@
|
|||||||
|
# This is a standalone comment.
|
||||||
sdfjklsdfsjldkflkjsf, sdfjsdfjlksdljkfsdlkf, sdfsdjfklsdfjlksdljkf, sdsfsdfjskdflsfsdf = 1, 2, 3
|
sdfjklsdfsjldkflkjsf, sdfjsdfjlksdljkfsdlkf, sdfsdjfklsdfjlksdljkf, sdsfsdfjskdflsfsdf = 1, 2, 3
|
||||||
|
|
||||||
|
# This is as well.
|
||||||
|
this_will_be_wrapped_in_parens, = struct.unpack(b"12345678901234567890")
|
||||||
|
|
||||||
|
(a,) = call()
|
||||||
|
|
||||||
# output
|
# output
|
||||||
|
|
||||||
|
|
||||||
|
# This is a standalone comment.
|
||||||
(
|
(
|
||||||
sdfjklsdfsjldkflkjsf,
|
sdfjklsdfsjldkflkjsf,
|
||||||
sdfjsdfjlksdljkfsdlkf,
|
sdfjsdfjlksdljkfsdlkf,
|
||||||
sdfsdjfklsdfjlksdljkf,
|
sdfsdjfklsdfjlksdljkf,
|
||||||
sdsfsdfjskdflsfsdf,
|
sdsfsdfjskdflsfsdf,
|
||||||
) = (1, 2, 3)
|
) = (1, 2, 3)
|
||||||
|
|
||||||
|
# This is as well.
|
||||||
|
(this_will_be_wrapped_in_parens,) = struct.unpack(b"12345678901234567890")
|
||||||
|
|
||||||
|
(a,) = call()
|
Loading…
Reference in New Issue
Block a user