Skip to content

Commit

Permalink
make lib2to3 parse async generators everywhere (GH-6588)
Browse files Browse the repository at this point in the history
(cherry picked from commit 149addd)

Co-authored-by: Zsolt Dollenstein <[email protected]>
  • Loading branch information
miss-islington and zsol authored Aug 10, 2021
1 parent 2e1fef5 commit 52d481f
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 @@ -512,13 +512,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 @@ -200,20 +200,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 52d481f

Please sign in to comment.