Make sure to only copy nodes that have the same indentation in diff parser

This commit is contained in:
Dave Halter
2020-04-04 16:07:54 +02:00
parent 3242e36859
commit f8dce76ef7
2 changed files with 28 additions and 2 deletions

View File

@@ -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

View File

@@ -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)