Skip to content

Commit

Permalink
make lib2to3 parse async generators everywhere
Browse files Browse the repository at this point in the history
  • Loading branch information
zsol committed Apr 24, 2018
1 parent 650ba4f commit 75a4ece
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
7 changes: 4 additions & 3 deletions Lib/lib2to3/pgen2/tokenize.py
Original file line number Diff line number Diff line change
Expand Up @@ -513,13 +513,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
17 changes: 12 additions & 5 deletions Lib/lib2to3/tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,20 +196,27 @@ def test_async_var(self):
self.validate("""await = 1""")
self.validate("""def async(): pass""")

def test_async_with(self):
def test_async_for(self):
self.validate("""async def foo():
async for a in b: pass""")

self.invalid_syntax("""def foo():
async for a in b: pass""")

def test_async_for(self):
def test_async_with(self):
self.validate("""async def foo():
async with a: pass""")

self.invalid_syntax("""def foo():
async with a: pass""")

def test_async_generator(self):
self.validate(
"""async def foo():
return (i * 2 async for i in arange(42))"""
)
self.validate(
"""def foo():
return (i * 2 async for i in arange(42))"""
)


class TestRaiseChanges(GrammarTest):
def test_2x_style_1(self):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lib2to3 now recognizes async generators everywhere.

0 comments on commit 75a4ece

Please sign in to comment.