From f8dce76ef7a20bb84abb86765066a8659c75e6db Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 4 Apr 2020 16:07:54 +0200 Subject: [PATCH] Make sure to only copy nodes that have the same indentation in diff parser --- parso/python/diff.py | 3 ++- test/test_diff_parser.py | 27 ++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/parso/python/diff.py b/parso/python/diff.py index ae2832c..bff58cd 100644 --- a/parso/python/diff.py +++ b/parso/python/diff.py @@ -636,8 +636,9 @@ class _NodesTree(object): # lines above there was an invalid indent. indentation = _get_indentation(tree_nodes[0]) for i, c in enumerate(tree_nodes): - if c.start_pos[1] < indentation: + if c.start_pos[1] != indentation: tree_nodes = tree_nodes[:i] + break old_working_stack = list(self._working_stack) old_prefix = self.prefix diff --git a/test/test_diff_parser.py b/test/test_diff_parser.py index 301c849..5084f5f 100644 --- a/test/test_diff_parser.py +++ b/test/test_diff_parser.py @@ -1408,7 +1408,7 @@ def test_error_dedent_in_function(differ): differ.parse(code2, parsers=ANY, copies=ANY, expect_error_leaves=True) -def test_x(differ): +def test_with_formfeed(differ): code1 = dedent('''\ @bla async def foo(): @@ -1427,3 +1427,28 @@ def test_x(differ): ''') differ.initialize(code1) differ.parse(code2, parsers=ANY, copies=ANY, expect_error_leaves=True) + + +def test_x(differ): + code1 = dedent('''\ +def foo(): + return + +@bla + a +def foo(): + a + b + c + ''') + code2 = dedent('''\ +def foo(): + return + +@bla + a + b + c + ''') + differ.initialize(code1) + differ.parse(code2, parsers=ANY, copies=ANY, expect_error_leaves=True)