1
0
forked from VimPlug/jedi

Recursions on if statements when using the advanced flow evaluation shouldn't be possible anymore.

This commit is contained in:
Dave Halter
2015-06-29 12:03:31 +02:00
parent a014d4fd38
commit db1ed70318
3 changed files with 15 additions and 8 deletions
+2 -1
View File
@@ -367,10 +367,11 @@ class Evaluator(object):
return types return types
def goto_definition(self, name): def goto_definition(self, name):
# TODO rename to goto_definitions
def_ = name.get_definition() def_ = name.get_definition()
if def_.type == 'expr_stmt' and name in def_.get_defined_names(): if def_.type == 'expr_stmt' and name in def_.get_defined_names():
return self.eval_statement(def_, name) return self.eval_statement(def_, name)
call = helpers.call_of_name(name) call = helpers.call_of_name(name, True)
return self.eval_element(call) return self.eval_element(call)
def goto(self, name): def goto(self, name):
+6 -1
View File
@@ -168,6 +168,12 @@ class NameFinder(object):
types = name_dict[str(self.name_str)] types = name_dict[str(self.name_str)]
except KeyError: except KeyError:
continue continue
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: else:
check = flow_analysis.break_check(self._evaluator, self.scope, check = flow_analysis.break_check(self._evaluator, self.scope,
origin_scope) origin_scope)
@@ -189,7 +195,6 @@ class NameFinder(object):
if check is flow_analysis.REACHABLE: if check is flow_analysis.REACHABLE:
break break
last_names.append(name)
if isinstance(name_scope, er.FunctionExecution): if isinstance(name_scope, er.FunctionExecution):
# Replace params # Replace params
+2 -1
View File
@@ -47,7 +47,8 @@ def break_check(evaluator, base_scope, stmt, origin_scope=None):
return REACHABLE return REACHABLE
origin_scope = origin_scope.parent 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): def _break_check(evaluator, stmt, base_scope, element_scope):