mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-09 06:04:54 +08:00
Fix error recovery for multi line strings at the end of the file
This commit is contained in:
@@ -126,8 +126,8 @@ class Parser(BaseParser):
|
|||||||
|
|
||||||
if self._start_nonterminal == 'file_input' and \
|
if self._start_nonterminal == 'file_input' and \
|
||||||
(token.type == PythonTokenTypes.ENDMARKER
|
(token.type == PythonTokenTypes.ENDMARKER
|
||||||
or token.type == DEDENT and '\n' not in last_leaf.value
|
or token.type == DEDENT and not last_leaf.value.endswith('\n')
|
||||||
and '\r' not in last_leaf.value):
|
and not last_leaf.value.endswith('\r')):
|
||||||
# In Python statements need to end with a newline. But since it's
|
# In Python statements need to end with a newline. But since it's
|
||||||
# possible (and valid in Python) that there's no newline at the
|
# possible (and valid in Python) that there's no newline at the
|
||||||
# end of a file, we have to recover even if the user doesn't want
|
# end of a file, we have to recover even if the user doesn't want
|
||||||
|
|||||||
@@ -1509,3 +1509,18 @@ def test_async_func2(differ):
|
|||||||
''')
|
''')
|
||||||
differ.initialize(code1)
|
differ.initialize(code1)
|
||||||
differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True)
|
differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True)
|
||||||
|
|
||||||
|
|
||||||
|
def test_weird_ending(differ):
|
||||||
|
code1 = dedent('''\
|
||||||
|
def foo():
|
||||||
|
a
|
||||||
|
return
|
||||||
|
''')
|
||||||
|
code2 = dedent('''\
|
||||||
|
def foo():
|
||||||
|
a
|
||||||
|
nonlocal xF"""
|
||||||
|
y"""''')
|
||||||
|
differ.initialize(code1)
|
||||||
|
differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user