From a0cadd93758e39382299eb2b476fad6575eb926d Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 2 Sep 2019 09:38:54 +0200 Subject: [PATCH] Use Context.create_name instead of weird playing with params everywhere --- jedi/api/__init__.py | 4 ++-- jedi/inference/__init__.py | 1 + jedi/inference/context.py | 11 +++++++++++ jedi/inference/usages.py | 12 +----------- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 0e790ca7..660716aa 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -302,8 +302,8 @@ class Script(object): # Without a name we really just want to jump to the result e.g. # executed by `foo()`, if we the cursor is after `)`. return self.goto_definitions(only_stubs=only_stubs, prefer_stubs=prefer_stubs) - context = self._get_module_context().create_context(tree_name) - names = list(self._inference_state.goto(context, tree_name)) + name = self._get_module_context().create_name(tree_name) + names = list(name.goto()) if follow_imports: names = filter_follow_imports(names) diff --git a/jedi/inference/__init__.py b/jedi/inference/__init__.py index f0157957..39525fb6 100644 --- a/jedi/inference/__init__.py +++ b/jedi/inference/__init__.py @@ -305,6 +305,7 @@ class InferenceState(object): if is_simple_name: return [TreeNameDefinition(context, name)] elif type_ == 'param': + assert False funcdef = tree.search_ancestor(name, 'funcdef', 'lambdef') func = context.get_root_context().create_value(funcdef) return [SimpleParamName(func, name)] diff --git a/jedi/inference/context.py b/jedi/inference/context.py index 901a7cd3..d942c079 100644 --- a/jedi/inference/context.py +++ b/jedi/inference/context.py @@ -6,6 +6,7 @@ from parso.python.tree import Name from jedi.inference.filters import ParserTreeFilter, MergedFilter, \ GlobalNameFilter +from jedi.inference.names import SimpleParamName, TreeNameDefinition from jedi.inference.base_value import NO_VALUES, ValueSet from jedi.parser_utils import get_parent_scope from jedi import debug @@ -271,6 +272,16 @@ class TreeContextMixin(object): scope_node = parent_scope(scope_node) return from_scope_node(scope_node, is_nested=True) + def create_name(self, tree_name): + definition = tree_name.get_definition() + if definition and definition.type == 'param' and definition.name == tree_name: + funcdef = search_ancestor(definition, 'funcdef', 'lambdef') + func = self.create_value(funcdef) + return SimpleParamName(func, tree_name) + else: + context = self.create_context(tree_name) + return TreeNameDefinition(context, tree_name) + class FunctionContext(TreeContextMixin, ValueContext): def get_filters(self, until_position=None, origin_scope=None): diff --git a/jedi/inference/usages.py b/jedi/inference/usages.py index 0fad56f0..95888ed2 100644 --- a/jedi/inference/usages.py +++ b/jedi/inference/usages.py @@ -1,7 +1,4 @@ -from parso.python.tree import search_ancestor - from jedi.inference import imports -from jedi.inference.names import TreeNameDefinition, SimpleParamName def _resolve_names(definition_names, avoid_names=()): @@ -29,14 +26,7 @@ def _dictionarize(names): def _find_names(module_context, tree_name): - definition = tree_name.get_definition() - if definition and definition.type == 'param' and definition.name == tree_name: - funcdef = search_ancestor(definition, 'funcdef', 'lambdef') - func = module_context.create_value(funcdef) - name = SimpleParamName(func, tree_name) - else: - context = module_context.create_context(tree_name) - name = TreeNameDefinition(context, tree_name) + name = module_context.create_name(tree_name) found_names = set(name.goto()) found_names.add(name) return _dictionarize(_resolve_names(found_names))