Fix diff parser: error dedent issues

This commit is contained in:
Dave Halter
2019-01-06 01:00:26 +01:00
parent 428bde0573
commit 6eba40b4c5
2 changed files with 37 additions and 0 deletions

View File

@@ -87,6 +87,9 @@ def _get_last_line(node_or_leaf):
def _ends_with_newline(leaf, suffix=''): def _ends_with_newline(leaf, suffix=''):
while leaf.type == 'error_leaf' and leaf.token_type == 'DEDENT':
leaf = leaf.get_previous_leaf()
if leaf.type == 'error_leaf': if leaf.type == 'error_leaf':
typ = leaf.token_type.lower() typ = leaf.token_type.lower()
else: else:

View File

@@ -818,3 +818,37 @@ def test_indentation_issues(differ):
differ.parse(code1, parsers=2, copies=1) differ.parse(code1, parsers=2, copies=1)
differ.parse(code3, parsers=1, copies=1) differ.parse(code3, parsers=1, copies=1)
differ.parse(code1, parsers=1, copies=2) differ.parse(code1, parsers=1, copies=2)
def test_x(differ):
code1 = dedent('''\
while True:
try:
1
except KeyError:
if 2:
3
except IndexError:
4
5
''')
code2 = dedent('''\
while True:
try:
except KeyError:
1
except KeyError:
if 2:
3
except IndexError:
4
something_inserted
5
''')
differ.initialize(code1)
differ.parse(code2, parsers=5, copies=1, expect_error_leaves=True)
differ.parse(code1, parsers=1, copies=0)