diff --git a/parso/python/diff.py b/parso/python/diff.py index f901813..3c66b75 100644 --- a/parso/python/diff.py +++ b/parso/python/diff.py @@ -617,6 +617,8 @@ class _NodesTree(object): # Endmarkers just distort all the checks below. Remove them. break + if node.type == 'error_leaf' and node.token_type == 'ERROR_DEDENT': + break # TODO this check might take a bit of time for large files. We # might want to change this to do more intelligent guessing or # binary search. diff --git a/test/test_diff_parser.py b/test/test_diff_parser.py index 9accde8..6f5c7f8 100644 --- a/test/test_diff_parser.py +++ b/test/test_diff_parser.py @@ -1148,3 +1148,28 @@ def test_dont_copy_error_leaves(differ): differ.initialize(code1) differ.parse(code2, parsers=1, expect_error_leaves=True) differ.parse(code1, parsers=2) + + +def test_error_dedent_in_between(differ): + code1 = dedent('''\ + class C: + def f(): + a + if something: + x + z + ''') + code2 = dedent('''\ + class C: + def f(): + a + dedent + if other_thing: + b + if something: + x + z + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True) + differ.parse(code1, parsers=2, copies=1)