From 6c65aea47df2be8907bc2e500a44f358828d91ec Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 6 Feb 2019 09:23:08 +0100 Subject: [PATCH] Fix working with async functions in the diff parser, fixes #56 --- parso/python/diff.py | 2 ++ test/test_diff_parser.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/parso/python/diff.py b/parso/python/diff.py index 6c119e5..2dcf027 100644 --- a/parso/python/diff.py +++ b/parso/python/diff.py @@ -682,6 +682,8 @@ class _NodesTree(object): last = new_nodes[-1] if last.type == 'decorated': last = last.children[-1] + if last.type in ('async_funcdef', 'async_stmt'): + last = last.children[-1] last_line_offset_leaf = last.children[-2].get_last_leaf() assert last_line_offset_leaf == ':' else: diff --git a/test/test_diff_parser.py b/test/test_diff_parser.py index a7a9799..63050e5 100644 --- a/test/test_diff_parser.py +++ b/test/test_diff_parser.py @@ -1267,3 +1267,20 @@ def test_x(differ): differ.parse(code2, copies=ANY, parsers=ANY, expect_error_leaves=True) differ.parse(code3, copies=ANY, parsers=ANY, expect_error_leaves=True) differ.parse(code1, copies=1) + + +@pytest.mark.skipif(sys.version_info < (3, 5), reason="Async starts working in 3.5") +def test_async_copy(differ): + code1 = dedent('''\ + async def main(): + x = 3 + print( + ''') + code2 = dedent('''\ + async def main(): + x = 3 + print() + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1) + differ.parse(code1, copies=1, parsers=1, expect_error_leaves=True)