Fix diff parser: Don't copy DEDENT tokens at the beginning

This commit is contained in:
Dave Halter
2019-01-17 21:31:13 +01:00
parent e591b929eb
commit 52d01685ba
2 changed files with 26 additions and 2 deletions

View File

@@ -622,6 +622,10 @@ class _NodesTree(object):
new_nodes.append(node)
while new_nodes and new_nodes[0].type == 'error_leaf' \
and new_nodes[0].token_type in _INDENTATION_TOKENS:
new_nodes.pop(0)
if not new_nodes:
return [], working_stack, prefix

View File

@@ -11,6 +11,8 @@ from parso import load_grammar
from parso.python.diff import DiffParser, _assert_valid_graph
from parso import parse
ANY = object()
def test_simple():
"""
@@ -69,7 +71,9 @@ class Differ(object):
error_node = _check_error_leaves_nodes(new_module)
assert expect_error_leaves == (error_node is not None), error_node
if parsers is not ANY:
assert diff_parser._parser_count == parsers
if copies is not ANY:
assert diff_parser._copy_count == copies
return new_module
@@ -1108,3 +1112,19 @@ def test_all_sorts_of_indentation(differ):
''')
differ.parse(code3, parsers=2, expect_error_leaves=True)
differ.parse('')
def test_dont_copy_dedents_in_beginning(differ):
code1 = dedent('''\
a
4
''')
code2 = dedent('''\
1
2
3
4
''')
differ.initialize(code1)
differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True)
differ.parse(code1, copies=1, parsers=1)