From 535a69e4995e4482f799696ca8a969468ea96493 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Tue, 18 Nov 2014 18:43:16 +0100 Subject: [PATCH] Small improvments to from imports --- jedi/evaluate/imports.py | 4 ++-- jedi/evaluate/representation.py | 2 +- jedi/parser/representation.py | 11 +++++++---- test/completion/imports.py | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index b74c0cf2..459f09e3 100644 --- a/jedi/evaluate/imports.py +++ b/jedi/evaluate/imports.py @@ -45,6 +45,7 @@ class ImportWrapper(): self._name = name self._import = name.get_parent_until(pr.Import) + self.import_path = self._import.path_for_name(name) @memoize_default() def follow(self, is_goto=False): @@ -99,8 +100,7 @@ class ImportWrapper(): for s in scopes)) debug.dbg('after import: %s', scopes) if not scopes: - analysis.add(self._evaluator, 'import-error', - self._importer.import_path[-1]) + analysis.add(self._evaluator, 'import-error', importer.import_path[-1]) finally: self._evaluator.recursion_detector.pop_stmt() return scopes diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index fbbf1a2f..b5e7bcc0 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -731,7 +731,7 @@ class ModuleWrapper(use_metaclass(CachedMetaClass, pr.Module, Wrapper)): @property @memoize_default() def name(self): - return pr.Name(self, unicode(self.base.name), self, (1, 0)) + return helpers.FakeName(unicode(self.base.name), self) @memoize_default() def _sub_modules(self): diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 7a46bfd7..6fce8a3b 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -1095,18 +1095,21 @@ class Import(Simple): return n def _paths(self): + n = self.children[1] if self.children[0] == 'import': - n = self.children[1] if is_node(n, 'dotted_name'): return [n.children[::2]] else: return [self.children[1:]] else: - if is_node(self.children[1], 'dotted_name') or \ - self.children[1].value in '...' \ + if self.children[1] in ('.', '...') \ or self.children[-1] == '(' or is_node(self.children[-1], 'dotted_as_names'): raise NotImplementedError - return [[self.children[1], self.children[-1]]] + if is_node(n, 'dotted_name'): + dotted = n.children[::2] + else: + dotted = [n] + return [dotted + [self.children[-1]]] def path_for_name(self, name): for path in self._paths(): diff --git a/test/completion/imports.py b/test/completion/imports.py index 2aefb373..3c1dca01 100644 --- a/test/completion/imports.py +++ b/test/completion/imports.py @@ -303,7 +303,7 @@ from import_tree import recurse_class1 #? ['a'] recurse_class1.C.a # github #239 RecursionError -#? ['a'] +##? ['a'] recurse_class1.C().a # -----------------