diff --git a/jedi/api/classes.py b/jedi/api/classes.py index e594c195..2fcf0546 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -340,7 +340,19 @@ class BaseDefinition(object): if tree_name is None or parent_context is None or isinstance(self._name, ParamName): context_set = self._name.infer() else: - context_set = self._evaluator.goto_definitions(parent_context, tree_name) + + # TODO remove this paragraph, it's ugly and shouldn't be needed + inferred = self._name.infer() + if inferred: + inferred = next(iter(inferred)) + if isinstance(inferred, MethodContext): + c = inferred.class_context + else: + c = self._name.parent_context + else: + c = self._name.parent_context + + context_set = self._evaluator.goto_definitions(c, tree_name) return [Definition(self._evaluator, d.name) for d in context_set] @property diff --git a/jedi/evaluate/context/function.py b/jedi/evaluate/context/function.py index 4e0b8078..a956fde3 100644 --- a/jedi/evaluate/context/function.py +++ b/jedi/evaluate/context/function.py @@ -159,6 +159,14 @@ class MethodContext(FunctionContext): def get_default_param_context(self): return self.class_context + def get_qualified_names(self): + # Need to implement this, because the parent context of a method + # context is not the class context but the module. + names = self.class_context.get_qualified_names() + if names is None: + return None + return names + [self.py__name__()] + class FunctionExecutionContext(TreeContext): """