mirror of
https://github.com/davidhalter/jedi.git
synced 2026-05-19 23:09:43 +08:00
Parser error recovery simplified. Just fall back to scopes, if somethings wrong.
This commit is contained in:
@@ -73,6 +73,7 @@ class NameFinder(object):
|
|||||||
names = scope.names_dict[str(self.name_str)]
|
names = scope.names_dict[str(self.name_str)]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
names = [name for name in names if name.is_definition()]
|
names = [name for name in names if name.is_definition()]
|
||||||
names = pr.filter_after_position(names, position)
|
names = pr.filter_after_position(names, position)
|
||||||
|
|
||||||
|
|||||||
+12
-23
@@ -103,30 +103,19 @@ class Parser(object):
|
|||||||
allows using different grammars (even non-Python). However, error
|
allows using different grammars (even non-Python). However, error
|
||||||
recovery is purely written for Python.
|
recovery is purely written for Python.
|
||||||
"""
|
"""
|
||||||
if value == '\n': # Statement is not finished.
|
# For now just discard everything that is not a suite or
|
||||||
# Now remove the whole statement.
|
# file_input, if we detect an error.
|
||||||
for i, (dfa, state, node) in reversed(list(enumerate(stack))):
|
for i, (dfa, state, node) in reversed(list(enumerate(stack))):
|
||||||
symbol, _, _, _ = node
|
symbol, _, _, _ = node
|
||||||
|
|
||||||
# `suite` can sometimes be only simple_stmt, not stmt.
|
# `suite` can sometimes be only simple_stmt, not stmt.
|
||||||
if symbol in (grammar.symbol2number['simple_stmt'],
|
if symbol in (grammar.symbol2number['file_input'],
|
||||||
grammar.symbol2number['stmt']):
|
grammar.symbol2number['suite']):
|
||||||
index = i
|
index = i
|
||||||
self._stack_removal(stack, index)
|
break
|
||||||
else:
|
self._stack_removal(stack, index + 1)
|
||||||
# For now just discard everything that is not a suite or
|
# No success finding a transition
|
||||||
# file_input, if we detect an error.
|
#raise ParseError("bad input", type, value, context)
|
||||||
for i, (dfa, state, node) in reversed(list(enumerate(stack))):
|
|
||||||
symbol, _, _, _ = node
|
|
||||||
|
|
||||||
# `suite` can sometimes be only simple_stmt, not stmt.
|
|
||||||
if symbol in (grammar.symbol2number['file_input'],
|
|
||||||
grammar.symbol2number['suite']):
|
|
||||||
index = i
|
|
||||||
break
|
|
||||||
self._stack_removal(stack, index + 1)
|
|
||||||
# No success finding a transition
|
|
||||||
#raise ParseError("bad input", type, value, context)
|
|
||||||
|
|
||||||
def _stack_removal(self, stack, start_index):
|
def _stack_removal(self, stack, start_index):
|
||||||
def clear_names(children):
|
def clear_names(children):
|
||||||
|
|||||||
Reference in New Issue
Block a user