diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 76ee01cd..3c89b737 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -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): diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index 8d3b19e1..d1de4415 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -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 diff --git a/jedi/evaluate/flow_analysis.py b/jedi/evaluate/flow_analysis.py index 2707dccf..a7e27de2 100644 --- a/jedi/evaluate/flow_analysis.py +++ b/jedi/evaluate/flow_analysis.py @@ -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):