mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-07 13:24:39 +08:00
Diff parser: Take care of one line function error recovery with decorator
This commit is contained in:
@@ -735,7 +735,17 @@ class _NodesTree(object):
|
|||||||
# suites like `def foo(): bar.-`. In this case we might not
|
# suites like `def foo(): bar.-`. In this case we might not
|
||||||
# include a newline in the statement and we need to take care
|
# include a newline in the statement and we need to take care
|
||||||
# of that.
|
# of that.
|
||||||
if c[-1].type in ('error_leaf', 'error_node'):
|
n = node
|
||||||
|
if n.type == 'decorated':
|
||||||
|
n = n.children[-1]
|
||||||
|
if n.type in ('async_funcdef', 'async_stmt'):
|
||||||
|
n = n.children[-1]
|
||||||
|
if n.type in ('classdef', 'funcdef'):
|
||||||
|
suite_node = n.children[-1]
|
||||||
|
else:
|
||||||
|
suite_node = c[-1]
|
||||||
|
|
||||||
|
if suite_node.type in ('error_leaf', 'error_node'):
|
||||||
break
|
break
|
||||||
|
|
||||||
new_nodes.append(node)
|
new_nodes.append(node)
|
||||||
|
|||||||
@@ -1728,3 +1728,23 @@ def test_one_line_function_error_recovery(differ):
|
|||||||
|
|
||||||
differ.initialize(code1)
|
differ.initialize(code1)
|
||||||
differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True)
|
differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True)
|
||||||
|
|
||||||
|
|
||||||
|
def test_one_line_property_error_recovery(differ):
|
||||||
|
code1 = dedent('''\
|
||||||
|
class X:
|
||||||
|
x
|
||||||
|
@property
|
||||||
|
def encoding(self): True -
|
||||||
|
return 1
|
||||||
|
''')
|
||||||
|
code2 = dedent('''\
|
||||||
|
class X:
|
||||||
|
x
|
||||||
|
@property
|
||||||
|
def encoding(self): True -
|
||||||
|
return 1
|
||||||
|
''')
|
||||||
|
|
||||||
|
differ.initialize(code1)
|
||||||
|
differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user