From c4c3ef5a210adbbd279ad89b33fd8217e8466106 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Thu, 11 Dec 2014 12:48:23 +0100 Subject: [PATCH] goto_definition on a name definition (statement) should land on the statement. --- jedi/api/__init__.py | 14 +++++++++++--- jedi/evaluate/__init__.py | 3 +++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index b653be35..66c17043 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -420,9 +420,17 @@ class Script(object): definitions = set(signature._definition for signature in self.call_signatures()) - if not definitions: - if goto_path: - definitions = set(self._prepare_goto(goto_path)) + if re.match('\w[\w\d_]*$', goto_path) and not definitions: + user_stmt = self._parser.user_stmt() + if user_stmt is not None and user_stmt.type == 'expr_stmt': + for name in user_stmt.get_defined_names(): + if name.start_pos <= self._pos <= name.end_pos: + # TODO scaning for a name and then using it should be + # the default. + definitions = set(self._evaluator.goto_definition(name)) + + if not definitions and goto_path: + definitions = set(self._prepare_goto(goto_path)) definitions = resolve_import_paths(definitions) names = [s.name for s in definitions diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index a3b8eef3..b0459802 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -454,6 +454,9 @@ class Evaluator(object): return types def goto_definition(self, name): + def_ = name.get_definition() + if def_.type == 'expr_stmt' and name in def_.get_defined_names(): + return self.eval_statement(def_, name) call = call_of_name(name) return self.eval_element(call)