mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-07 05:14:29 +08:00
Fix diff parser: Need to calculate the prefix for the diff tokenizer better
This commit is contained in:
@@ -388,6 +388,10 @@ class DiffParser(object):
|
||||
typ, string, start_pos, prefix = next(tokens)
|
||||
if '\n' in prefix or '\r' in 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(
|
||||
PythonTokenTypes.ENDMARKER, '',
|
||||
(start_pos[0] + line_offset, 0),
|
||||
|
||||
@@ -1012,3 +1012,25 @@ def test_special_no_newline_ending(differ):
|
||||
differ.initialize(code1)
|
||||
differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True)
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user