Support parsing of async generators in non-async functions (#165)
This is a new syntax added in python3.7, so black can't verify that reformatting will not change the ast unless black itself is run with 3.7. We'll need to change the error message black gives in this case. @ambv any ideas? Fixes #125.
This commit is contained in:
parent
b719d85ccc
commit
883689366c
@ -516,13 +516,14 @@ def generate_tokens(readline):
|
||||
stashed = tok
|
||||
continue
|
||||
|
||||
if token == 'def':
|
||||
if token in ('def', 'for'):
|
||||
if (stashed
|
||||
and stashed[0] == NAME
|
||||
and stashed[1] == 'async'):
|
||||
|
||||
async_def = True
|
||||
async_def_indent = indents[-1]
|
||||
if token == 'def':
|
||||
async_def = True
|
||||
async_def_indent = indents[-1]
|
||||
|
||||
yield (ASYNC, stashed[1],
|
||||
stashed[2], stashed[3],
|
||||
|
13
tests/data/python37.py
Normal file
13
tests/data/python37.py
Normal file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env python3.7
|
||||
|
||||
def f():
|
||||
return (i*2 async for i in arange(42))
|
||||
|
||||
# output
|
||||
|
||||
|
||||
#!/usr/bin/env python3.7
|
||||
|
||||
|
||||
def f():
|
||||
return (i * 2 async for i in arange(42))
|
@ -411,6 +411,16 @@ def test_stub(self) -> None:
|
||||
self.assertFormatEqual(expected, actual)
|
||||
black.assert_stable(source, actual, line_length=ll, mode=mode)
|
||||
|
||||
@patch("black.dump_to_file", dump_to_stderr)
|
||||
def test_python37(self) -> None:
|
||||
source, expected = read_data("python37")
|
||||
actual = fs(source)
|
||||
self.assertFormatEqual(expected, actual)
|
||||
major, minor = sys.version_info[:2]
|
||||
if major > 3 or (major == 3 and minor >= 7):
|
||||
black.assert_equivalent(source, actual)
|
||||
black.assert_stable(source, actual, line_length=ll)
|
||||
|
||||
@patch("black.dump_to_file", dump_to_stderr)
|
||||
def test_fmtonoff(self) -> None:
|
||||
source, expected = read_data("fmtonoff")
|
||||
|
Loading…
Reference in New Issue
Block a user