From c442cf98be5e56597184060920d2a9d6256ad695 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 6 Jan 2019 12:39:04 +0100 Subject: [PATCH] Fix valid graph asserting for some dedents that are errors --- parso/python/diff.py | 5 +++-- test/test_diff_parser.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/parso/python/diff.py b/parso/python/diff.py index 5ca4fef..2815afd 100644 --- a/parso/python/diff.py +++ b/parso/python/diff.py @@ -33,10 +33,11 @@ def _assert_valid_graph(node): # Ignore INDENT is necessary, because indent/dedent tokens don't # contain value/prefix and are just around, because of the tokenizer. - if node.type == 'error_leaf' and node.token_type in ('INDENT', 'ERROR_DEDENT'): + error_tokens = 'INDENT', 'ERROR_DEDENT', 'DEDENT' + if node.type == 'error_leaf' and node.token_type in error_tokens: return while previous_leaf and previous_leaf.type == 'error_leaf' \ - and previous_leaf.token_type in ('INDENT', 'ERROR_DEDENT'): + and previous_leaf.token_type in error_tokens: assert previous_leaf.end_pos <= node.start_pos, \ (previous_leaf, node) previous_leaf = previous_leaf.get_previous_leaf() diff --git a/test/test_diff_parser.py b/test/test_diff_parser.py index af4acf6..23bb229 100644 --- a/test/test_diff_parser.py +++ b/test/test_diff_parser.py @@ -884,3 +884,38 @@ Some'random text: yeah differ.initialize(code1) differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True) differ.parse(code1, parsers=1, copies=1) + + +def test_l(differ): + code1 = dedent('''\ + class C: + def f(self): + def iterate(): + if 1: + yield t + else: + yield + return + + def g(): + 3 + ''') + + code2 = dedent('''\ + def f(self): + def iterate(): + if 1: + yield t + hahahaha + if 2: + else: + yield + return + + def g(): + 3 + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=1)