diff --git a/jedi/evaluate/helpers.py b/jedi/evaluate/helpers.py index 28589ebd..65149131 100644 --- a/jedi/evaluate/helpers.py +++ b/jedi/evaluate/helpers.py @@ -340,10 +340,21 @@ class FakeStatement(pr.ExprStmt): class FakeImport(pr.Import): def __init__(self, name, parent, level=0): - p = 0, 0 - super(FakeImport, self).__init__(FakeSubModule, p, p, [name], - relative_count=level) + super(FakeImport, self).__init__([]) self.parent = parent + self._level = level + self.name = name + + @property + def level(self): + return self._level + + @property + def start_pos(self): + return 0, 0 + + def _paths(self): + return [[self.name]] class FakeName(pr.Name): diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 0fcceba8..7a46bfd7 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -1063,7 +1063,11 @@ class ForFlow(Flow): class Import(Simple): def get_defined_names(self): if self.children[0] == 'import': - return self.children[1:] + n = self.children[1] + if is_node(n, 'dotted_name'): + return [n.children[0]] + else: + return [n] else: # from # , , , return [self.children[-1]] @@ -1092,7 +1096,11 @@ class Import(Simple): def _paths(self): if self.children[0] == 'import': - return [self.children[1:]] + 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 '...' \ @@ -1103,7 +1111,8 @@ class Import(Simple): def path_for_name(self, name): for path in self._paths(): if name in path: - return path + return path[:path.index(name) + 1] + raise NotImplementedError @property def level(self):