Don't make parentheses invisible around yield expressions

This commit is contained in:
Łukasz Langa 2018-05-08 23:31:41 -07:00
parent 7595dabb43
commit 90e14e8b61
4 changed files with 42 additions and 12 deletions

View File

@ -2258,6 +2258,7 @@ def maybe_make_parens_invisible_in_atom(node: LN) -> bool:
node.type != syms.atom node.type != syms.atom
or is_empty_tuple(node) or is_empty_tuple(node)
or is_one_tuple(node) or is_one_tuple(node)
or is_yield(node)
or max_delimiter_priority_in_atom(node) >= COMMA_PRIORITY or max_delimiter_priority_in_atom(node) >= COMMA_PRIORITY
): ):
return False return False
@ -2308,6 +2309,27 @@ def is_one_tuple(node: LN) -> bool:
) )
def is_yield(node: LN) -> bool:
"""Return True if `node` holds a `yield` or `yield from` expression."""
if node.type == syms.yield_expr:
return True
if node.type == token.NAME and node.value == "yield": # type: ignore
return True
if node.type != syms.atom:
return False
if len(node.children) != 3:
return False
lpar, expr, rpar = node.children
if lpar.type == token.LPAR and rpar.type == token.RPAR:
return is_yield(expr)
return False
def is_vararg(leaf: Leaf, within: Set[NodeType]) -> bool: def is_vararg(leaf: Leaf, within: Set[NodeType]) -> bool:
"""Return True if `leaf` is a star or double star in a vararg or kwarg. """Return True if `leaf` is a star or double star in a vararg or kwarg.

View File

@ -192,10 +192,9 @@
+ +
def gen(): def gen():
yield from outside_of_generator yield from outside_of_generator
- a = (yield) a = (yield)
+ a = yield
+
+
async def f(): async def f():
await some.complicated[0].call(with_args=(True or (1 is not 1))) await some.complicated[0].call(with_args=(True or (1 is not 1)))
-print(* [] or [1]) -print(* [] or [1])

View File

@ -426,7 +426,7 @@ async def f():
def gen(): def gen():
yield from outside_of_generator yield from outside_of_generator
a = yield a = (yield)
async def f(): async def f():

View File

@ -85,11 +85,14 @@ def f(
a, a,
**kwargs, **kwargs,
) -> A: ) -> A:
return A( return (
very_long_argument_name1=very_long_value_for_the_argument, yield from A(
very_long_argument_name2=very_long_value_for_the_argument, very_long_argument_name1=very_long_value_for_the_argument,
**kwargs, very_long_argument_name2=very_long_value_for_the_argument,
**kwargs,
)
) )
def __await__(): return (yield)
# output # output
@ -224,8 +227,14 @@ def trailing_comma():
def f(a, **kwargs) -> A: def f(a, **kwargs) -> A:
return A( return (
very_long_argument_name1=very_long_value_for_the_argument, yield from A(
very_long_argument_name2=very_long_value_for_the_argument, very_long_argument_name1=very_long_value_for_the_argument,
**kwargs, very_long_argument_name2=very_long_value_for_the_argument,
**kwargs,
)
) )
def __await__():
return (yield)