Make sure async for is not broken up to separate lines (#503)

Fixes #372.
This commit is contained in:
Zsolt Dollenstein 2018-09-08 10:34:08 +01:00 committed by GitHub
parent 25795c9ff5
commit 08f1cdd00b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 3 deletions

View File

@ -872,6 +872,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
* fixed formatting of lambda expressions with default arguments (#468)
* *Black* no longer breaks ``async for`` statements up to separate lines (#372)
### 18.6b4

View File

@ -1889,7 +1889,7 @@ def is_split_after_delimiter(leaf: Leaf, previous: Leaf = None) -> int:
def is_split_before_delimiter(leaf: Leaf, previous: Leaf = None) -> int:
"""Return the priority of the `leaf` delimiter, given a line before after it.
"""Return the priority of the `leaf` delimiter, given a line break before it.
The delimiter priorities returned here are from those delimiters that would
cause a line break before themselves.
@ -1926,15 +1926,20 @@ def is_split_before_delimiter(leaf: Leaf, previous: Leaf = None) -> int:
):
return STRING_PRIORITY
if leaf.type != token.NAME:
if leaf.type not in {token.NAME, token.ASYNC}:
return 0
if (
leaf.value == "for"
and leaf.parent
and leaf.parent.type in {syms.comp_for, syms.old_comp_for}
or leaf.type == token.ASYNC
):
return COMPREHENSION_PRIORITY
if (
not isinstance(leaf.prev_sibling, Leaf)
or leaf.prev_sibling.value != "async"
):
return COMPREHENSION_PRIORITY
if (
leaf.value == "if"

View File

@ -3,6 +3,17 @@
def f():
return (i*2 async for i in arange(42))
def g():
return (something_long * something_long async for something_long in async_generator(with_an_argument))
async def func():
if test:
out_batched = [
i
async for i in aitertools._async_map(
self.async_inc, arange(8), batch_size=3
)
]
# output
@ -11,3 +22,20 @@ def f():
def f():
return (i * 2 async for i in arange(42))
def g():
return (
something_long * something_long
async for something_long in async_generator(with_an_argument)
)
async def func():
if test:
out_batched = [
i
async for i in aitertools._async_map(
self.async_inc, arange(8), batch_size=3
)
]