mirror of
https://github.com/davidhalter/jedi.git
synced 2026-01-16 08:56:44 +08:00
Recursions on if statements when using the advanced flow evaluation shouldn't be possible anymore.
This commit is contained in:
@@ -367,10 +367,11 @@ class Evaluator(object):
|
||||
return types
|
||||
|
||||
def goto_definition(self, name):
|
||||
# TODO rename to goto_definitions
|
||||
def_ = name.get_definition()
|
||||
if def_.type == 'expr_stmt' and name in def_.get_defined_names():
|
||||
return self.eval_statement(def_, name)
|
||||
call = helpers.call_of_name(name)
|
||||
call = helpers.call_of_name(name, True)
|
||||
return self.eval_element(call)
|
||||
|
||||
def goto(self, name):
|
||||
|
||||
@@ -169,12 +169,18 @@ class NameFinder(object):
|
||||
except KeyError:
|
||||
continue
|
||||
else:
|
||||
check = flow_analysis.break_check(self._evaluator, self.scope,
|
||||
origin_scope)
|
||||
if check is flow_analysis.UNREACHABLE:
|
||||
self._found_predefined_if_name = []
|
||||
else:
|
||||
if self.name_str.start_pos < scope.end_pos:
|
||||
# It doesn't make any sense to check if
|
||||
# statements in the if statement itself, just
|
||||
# deliver types.
|
||||
self._found_predefined_if_name = types
|
||||
else:
|
||||
check = flow_analysis.break_check(self._evaluator, self.scope,
|
||||
origin_scope)
|
||||
if check is flow_analysis.UNREACHABLE:
|
||||
self._found_predefined_if_name = []
|
||||
else:
|
||||
self._found_predefined_if_name = types
|
||||
break
|
||||
else:
|
||||
origin_scope = None
|
||||
@@ -189,7 +195,6 @@ class NameFinder(object):
|
||||
|
||||
if check is flow_analysis.REACHABLE:
|
||||
break
|
||||
last_names.append(name)
|
||||
|
||||
if isinstance(name_scope, er.FunctionExecution):
|
||||
# Replace params
|
||||
|
||||
@@ -47,7 +47,8 @@ def break_check(evaluator, base_scope, stmt, origin_scope=None):
|
||||
return REACHABLE
|
||||
origin_scope = origin_scope.parent
|
||||
"""
|
||||
return _break_check(evaluator, stmt, base_scope, element_scope)
|
||||
x = _break_check(evaluator, stmt, base_scope, element_scope)
|
||||
return x
|
||||
|
||||
|
||||
def _break_check(evaluator, stmt, base_scope, element_scope):
|
||||
|
||||
Reference in New Issue
Block a user