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)