diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index e1e7d29d..215bb135 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -85,7 +85,7 @@ from jedi.evaluate.context.iterable import CompForContext from jedi.evaluate.syntax_tree import eval_trailer, eval_expr_stmt, \ eval_node, check_tuple_assignments from jedi.evaluate.gradual.stub_context import with_stub_context_if_possible, \ - stub_to_actual_context_set, goto_with_stubs_if_possible + stub_to_actual_context_set, goto_with_stubs_if_possible, goto_non_stub def _execute(context, arguments): @@ -342,8 +342,11 @@ class Evaluator(object): elif type_ == 'param': return [ParamName(context, name)] elif type_ in ('funcdef', 'classdef'): - n = TreeNameDefinition(context, name) - return goto_with_stubs_if_possible(n) + if context.is_stub(): + return goto_non_stub(context, name) + else: + n = TreeNameDefinition(context, name) + return goto_with_stubs_if_possible(n) elif type_ in ('import_from', 'import_name'): module_names = imports.infer_import(context, name, is_goto=True) return module_names diff --git a/jedi/evaluate/gradual/stub_context.py b/jedi/evaluate/gradual/stub_context.py index c25cebcb..afd4595a 100644 --- a/jedi/evaluate/gradual/stub_context.py +++ b/jedi/evaluate/gradual/stub_context.py @@ -303,6 +303,11 @@ def goto_with_stubs_if_possible(name): ] or [name] +def goto_non_stub(parent_context, tree_name): + contexts = stub_to_actual_context_set(parent_context) + return contexts.py__getattribute__(tree_name, is_goto=True) + + def stub_to_actual_context_set(stub_context): qualified_names = stub_context.get_qualified_names() if qualified_names is None: