Skip to content

Commit

Permalink
Support parsing of async generators in non-async functions (#165)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
zsol authored and ambv committed Aug 20, 2018
1 parent b719d85 commit 8836893
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
7 changes: 4 additions & 3 deletions blib2to3/pgen2/tokenize.py
Expand Up @@ -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],
Expand Down
13 changes: 13 additions & 0 deletions tests/data/python37.py
@@ -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))
10 changes: 10 additions & 0 deletions tests/test_black.py
Expand Up @@ -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")
Expand Down

0 comments on commit 8836893

Please sign in to comment.