diff --git a/parso/python/diff.py b/parso/python/diff.py index 808d6de..396dc9e 100644 --- a/parso/python/diff.py +++ b/parso/python/diff.py @@ -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 diff --git a/test/test_diff_parser.py b/test/test_diff_parser.py index baf3de6..93014e0 100644 --- a/test/test_diff_parser.py +++ b/test/test_diff_parser.py @@ -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,8 +71,10 @@ class Differ(object): error_node = _check_error_leaves_nodes(new_module) assert expect_error_leaves == (error_node is not None), error_node - assert diff_parser._parser_count == parsers - assert diff_parser._copy_count == copies + 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)