From 67ebb6acac59ecc76a1e5d47ba4cc46a8dea79b1 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 4 Apr 2020 23:14:10 +0200 Subject: [PATCH] async is actually a token that cannot appear in brackets --- parso/python/tokenize.py | 2 ++ test/test_diff_parser.py | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/parso/python/tokenize.py b/parso/python/tokenize.py index f490bb0..8a878cb 100644 --- a/parso/python/tokenize.py +++ b/parso/python/tokenize.py @@ -258,6 +258,8 @@ def _create_token_collection(version_info): ALWAYS_BREAK_TOKENS = (';', 'import', 'class', 'def', 'try', 'except', 'finally', 'while', 'with', 'return') + if version_info >= (3, 5): + ALWAYS_BREAK_TOKENS += ('async',) pseudo_token_compiled = _compile(PseudoToken) return TokenCollection( pseudo_token_compiled, single_quoted, triple_quoted, endpats, diff --git a/test/test_diff_parser.py b/test/test_diff_parser.py index a8950bc..5c33d7b 100644 --- a/test/test_diff_parser.py +++ b/test/test_diff_parser.py @@ -1487,3 +1487,25 @@ def test_invalid_function(differ): ''') differ.initialize(code1) differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True) + + +def test_async_func2(differ): + code1 = dedent('''\ + async def foo(): + return '' + @bla + async def foo(): + x + ''') + code2 = dedent('''\ + async def foo(): + return '' + + { + @bla + async def foo(): + x + y + ''') + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True)