Fix diff parser: Need to calculate the prefix for the diff tokenizer better

This commit is contained in:
Dave Halter
2019-01-13 22:38:53 +01:00
parent ea8a758051
commit 01dba7f8ce
2 changed files with 26 additions and 0 deletions

View File

@@ -388,6 +388,10 @@ class DiffParser(object):
typ, string, start_pos, prefix = next(tokens) typ, string, start_pos, prefix = next(tokens)
if '\n' in prefix or '\r' in prefix: if '\n' in prefix or '\r' in prefix:
prefix = re.sub(r'[^\n\r]+\Z', '', prefix) prefix = re.sub(r'[^\n\r]+\Z', '', prefix)
else:
assert start_pos[1] >= len(prefix), repr(prefix)
if start_pos[1] - len(prefix) == 0:
prefix = ''
yield PythonToken( yield PythonToken(
PythonTokenTypes.ENDMARKER, '', PythonTokenTypes.ENDMARKER, '',
(start_pos[0] + line_offset, 0), (start_pos[0] + line_offset, 0),

View File

@@ -1012,3 +1012,25 @@ def test_special_no_newline_ending(differ):
differ.initialize(code1) differ.initialize(code1)
differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True) differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True)
differ.parse(code1, copies=1, parsers=0) differ.parse(code1, copies=1, parsers=0)
def test_random_character_insertion(differ):
code1 = dedent('''\
def create(self):
1
if self.path is not None:
return
# 3
# 4
''')
code2 = dedent('''\
def create(self):
1
if 2:
x return
# 3
# 4
''')
differ.initialize(code1)
differ.parse(code2, copies=1, parsers=3, expect_error_leaves=True)
differ.parse(code1, copies=1, parsers=1)