Fix error recovery for multi line strings at the end of the file

This commit is contained in:
Dave Halter
2020-04-05 00:13:55 +02:00
parent 67ebb6acac
commit ebc69545c7
2 changed files with 17 additions and 2 deletions

View File

@@ -126,8 +126,8 @@ class Parser(BaseParser):
if self._start_nonterminal == 'file_input' and \
(token.type == PythonTokenTypes.ENDMARKER
or token.type == DEDENT and '\n' not in last_leaf.value
and '\r' not in last_leaf.value):
or token.type == DEDENT and not last_leaf.value.endswith('\n')
and not last_leaf.value.endswith('\r')):
# 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
# end of a file, we have to recover even if the user doesn't want

View File

@@ -1509,3 +1509,18 @@ def test_async_func2(differ):
''')
differ.initialize(code1)
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)