diff --git a/jedi/api/usages.py b/jedi/api/usages.py index 47b100ed..2d6df619 100644 --- a/jedi/api/usages.py +++ b/jedi/api/usages.py @@ -64,7 +64,7 @@ def resolve_potential_imports(evaluator, definitions): new = set() for d in definitions: if isinstance(d, TreeNameDefinition): - imp_or_stmt = d.tree_name.get_definition() + imp_or_stmt = d.tree_name._get_definition() if isinstance(imp_or_stmt, tree.Import): new |= resolve_potential_imports( evaluator, diff --git a/jedi/evaluate/filters.py b/jedi/evaluate/filters.py index 5afdb7a7..16a4b6b4 100644 --- a/jedi/evaluate/filters.py +++ b/jedi/evaluate/filters.py @@ -74,6 +74,14 @@ class ContextName(ContextNameMixin, AbstractTreeName): class TreeNameDefinition(AbstractTreeName): + _API_TYPES = dict( + import_name='module', + import_from='module', + funcdef='function', + param='param', + classdef='class', + ) + def infer(self): # Refactor this, should probably be here. from jedi.evaluate.finder import _name_to_types @@ -81,14 +89,12 @@ class TreeNameDefinition(AbstractTreeName): @property def api_type(self): - definition = self.tree_name.get_definition() - return dict( - import_name='module', - import_from='module', - funcdef='function', - param='param', - classdef='class', - ).get(definition.type, 'statement') + definition = self.tree_name._get_definition() + if definition is None: + definition = self.tree_name.parent + if definition.type == 'dotted_as_name': + definition = definition.parent + return self._API_TYPES.get(definition.type, 'statement') class ParamName(AbstractTreeName): diff --git a/test/test_api/test_classes.py b/test/test_api/test_classes.py index 4e93f55b..57b90951 100644 --- a/test/test_api/test_classes.py +++ b/test/test_api/test_classes.py @@ -358,7 +358,7 @@ class TestGotoAssignments(TestCase): nms = names('import json as foo', references=True) assert nms[0].name == 'json' assert nms[0].type == 'module' - assert nms[0]._name.tree_name.get_definition().type == 'import_name' + assert nms[0]._name.tree_name.parent.type == 'dotted_as_name' n = nms[0].goto_assignments()[0] assert n.name == 'json' assert n.type == 'module' @@ -366,7 +366,7 @@ class TestGotoAssignments(TestCase): assert nms[1].name == 'foo' assert nms[1].type == 'module' - assert nms[1]._name.tree_name.get_definition().type == 'import_name' + assert nms[1]._name.tree_name.parent.type == 'dotted_as_name' ass = nms[1].goto_assignments() assert len(ass) == 1 assert ass[0].name == 'json'