diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 7037c679..0138f618 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -67,7 +67,7 @@ class BaseDefinition(object): """ An instance of :class:`jedi.parser.reprsentation.Name` subclass. """ - self._definition = self._name.get_definition() + self._definition = er.wrap(evaluator, self._name.get_definition()) self.is_keyword = isinstance(self._definition, keywords.Keyword) # generate a path to the definition @@ -162,7 +162,6 @@ class BaseDefinition(object): return 'import' string = type(stripped).__name__.lower().replace('wrapper', '') - print(stripped, string) if string == 'exprstmt': return 'statement' else: @@ -485,7 +484,7 @@ class Completion(BaseDefinition): """ definition = self._definition if isinstance(definition, pr.Import): - i = imports.ImportWrapper(self._evaluator, definition) + i = imports.ImportWrapper(self._evaluator, self._name) if len(i.import_path) > 1 or not fast: followed = self._follow_statements_imports() if followed: @@ -504,7 +503,7 @@ class Completion(BaseDefinition): description, look at :attr:`jedi.api.classes.BaseDefinition.type`. """ if isinstance(self._definition, pr.Import): - i = imports.ImportWrapper(self._evaluator, self._definition) + i = imports.ImportWrapper(self._evaluator, self._name) if len(i.import_path) <= 1: return 'module' @@ -521,14 +520,9 @@ class Completion(BaseDefinition): # imports completion is very complicated and needs to be treated # separately in Completion. definition = self._definition - if definition.isinstance(pr.Import) and definition.alias is None: - i = imports.ImportWrapper(self._evaluator, definition, True) - import_path = i.import_path + (unicode(self._name),) - try: - return imports.get_importer(self._evaluator, import_path, - i._importer.module).follow(self._evaluator) - except imports.ModuleNotFound: - pass + if definition.isinstance(pr.Import): + i = imports.ImportWrapper(self._evaluator, self._name) + return i.follow() return super(Completion, self)._follow_statements_imports() @memoize_default() diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index 2a8b3c31..02680d59 100644 --- a/jedi/evaluate/imports.py +++ b/jedi/evaluate/imports.py @@ -29,7 +29,6 @@ from jedi.common import source_to_unicode from jedi.evaluate import compiled from jedi.evaluate import analysis from jedi.evaluate.cache import memoize_default, NO_DEFAULT -from jedi.evaluate.helpers import FakeSubModule class ModuleNotFound(Exception): @@ -599,7 +598,7 @@ class _Importer(object): return _load_module(self._evaluator, name=path, sys_path=sys_path), rest def _generate_name(self, name): - return helpers.FakeName(name, parent=FakeSubModule) + return helpers.FakeName(name, parent=self.module) def _get_module_names(self, search_path=None): """ diff --git a/test/test_api/test_api_classes.py b/test/test_api/test_api_classes.py index dd36c9fd..df6e3898 100644 --- a/test/test_api/test_api_classes.py +++ b/test/test_api/test_api_classes.py @@ -95,7 +95,7 @@ def test_function_call_signature_in_doc(): pass f""").goto_definitions() doc = defs[0].doc - assert "f(x, y = 1, z = 'a')" in str(doc) + assert "f(x, y=1, z='a')" in str(doc) def test_class_call_signature(): @@ -308,4 +308,7 @@ class TestGotoAssignments(TestCase): assert nms[1].name == 'foo' assert nms[1].type == 'import' - assert [nms[1]] == nms[1].goto_assignments() + ass = nms[1].goto_assignments() + assert len(ass) == 1 + assert ass[0].name == 'json' + assert ass[0].type == 'module'