wrap atoms in invisible parens to split adjacent strings (#463)
This commit is contained in:
parent
d4f0521754
commit
8b340e2102
@ -849,6 +849,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
|
|||||||
|
|
||||||
### 18.8b0
|
### 18.8b0
|
||||||
|
|
||||||
|
* adjacent string literals are now correctly split into multiple lines (#463)
|
||||||
|
|
||||||
* code with `_` in numeric literals is recognized as Python 3.6+ (#461)
|
* code with `_` in numeric literals is recognized as Python 3.6+ (#461)
|
||||||
|
|
||||||
* numeric literals are now normalized to include `_` separators on Python 3.6+ code
|
* numeric literals are now normalized to include `_` separators on Python 3.6+ code
|
||||||
|
16
black.py
16
black.py
@ -2587,7 +2587,11 @@ def normalize_invisible_parens(node: Node, parens_after: Set[str]) -> None:
|
|||||||
for index, child in enumerate(list(node.children)):
|
for index, child in enumerate(list(node.children)):
|
||||||
if check_lpar:
|
if check_lpar:
|
||||||
if child.type == syms.atom:
|
if child.type == syms.atom:
|
||||||
maybe_make_parens_invisible_in_atom(child)
|
if maybe_make_parens_invisible_in_atom(child):
|
||||||
|
lpar = Leaf(token.LPAR, "")
|
||||||
|
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 child in visible parentheses
|
||||||
lpar = Leaf(token.LPAR, "(")
|
lpar = Leaf(token.LPAR, "(")
|
||||||
@ -2695,7 +2699,11 @@ def generate_ignored_nodes(leaf: Leaf) -> Iterator[LN]:
|
|||||||
|
|
||||||
|
|
||||||
def maybe_make_parens_invisible_in_atom(node: LN) -> bool:
|
def maybe_make_parens_invisible_in_atom(node: LN) -> bool:
|
||||||
"""If it's safe, make the parens in the atom `node` invisible, recursively."""
|
"""If it's safe, make the parens in the atom `node` invisible, recursively.
|
||||||
|
|
||||||
|
Returns whether the node should itself be wrapped in invisible parentheses.
|
||||||
|
|
||||||
|
"""
|
||||||
if (
|
if (
|
||||||
node.type != syms.atom
|
node.type != syms.atom
|
||||||
or is_empty_tuple(node)
|
or is_empty_tuple(node)
|
||||||
@ -2713,10 +2721,10 @@ def maybe_make_parens_invisible_in_atom(node: LN) -> bool:
|
|||||||
last.value = "" # type: ignore
|
last.value = "" # type: ignore
|
||||||
if len(node.children) > 1:
|
if len(node.children) > 1:
|
||||||
maybe_make_parens_invisible_in_atom(node.children[1])
|
maybe_make_parens_invisible_in_atom(node.children[1])
|
||||||
return True
|
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def is_empty_tuple(node: LN) -> bool:
|
def is_empty_tuple(node: LN) -> bool:
|
||||||
"""Return True if `node` holds an empty tuple."""
|
"""Return True if `node` holds an empty tuple."""
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
""".split():
|
""".split():
|
||||||
if key in self.connect_kwargs:
|
if key in self.connect_kwargs:
|
||||||
raise ValueError(err.format(key))
|
raise ValueError(err.format(key))
|
||||||
|
concatenated_strings = "some strings that are" "concatenated implicitly, so if you put them on separate" "lines it will fit"
|
||||||
|
|
||||||
|
|
||||||
# output
|
# output
|
||||||
@ -85,3 +86,8 @@
|
|||||||
""".split():
|
""".split():
|
||||||
if key in self.connect_kwargs:
|
if key in self.connect_kwargs:
|
||||||
raise ValueError(err.format(key))
|
raise ValueError(err.format(key))
|
||||||
|
concatenated_strings = (
|
||||||
|
"some strings that are"
|
||||||
|
"concatenated implicitly, so if you put them on separate"
|
||||||
|
"lines it will fit"
|
||||||
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user