diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 5935e3e5..a91fd30d 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -401,17 +401,12 @@ class Completion(BaseDefinition): defs = self._evaluator.eval_statement(self._definition) elif self._definition.isinstance(pr.Import): if self._definition.alias is None: - print('ha', self._definition, repr(self._name)) i = imports.ImportPath(self._evaluator, self._definition, True) - print('h', i.import_path + [unicode(self._name)]) defs = imports.Importer(i.import_path + [unicode(self._name)], - i._importer.module).follow_file_system()[0] - defs = [defs] - print(defs) + i._importer.module).follow(self._evaluator) else: defs = imports.strip_imports(self._evaluator, [self._definition]) else: - print('else', self._definition) return [self] defs = [BaseDefinition(self._evaluator, d, d.start_pos) for d in defs] diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index 212c560d..0e7f5b2b 100644 --- a/jedi/evaluate/imports.py +++ b/jedi/evaluate/imports.py @@ -267,29 +267,11 @@ class Importer(object): return in_path + sys_path.sys_path_with_modifications(self.module) def follow(self, evaluator): - try: - scope, rest = self._importer.follow_file_system() - except ModuleNotFound: - debug.warning('Module not found: %s', self.import_stmt) - return [] - - scopes = [scope] - scopes += remove_star_imports(self._evaluator, scope) - - # follow the rest of the import (not FS -> classes, functions) - if len(rest) > 1 or rest and self.is_like_search: - scopes = [] - if ['os', 'path'] == self.import_path[:2] \ - and not self._is_relative_import(): - # This is a huge exception, we follow a nested import - # ``os.path``, because it's a very important one in Python - # that is being achieved by messing with ``sys.modules`` in - # ``os``. - scopes = self._evaluator.follow_path(iter(rest), [scope], scope) - elif rest: - scopes = itertools.chain.from_iterable( - self._evaluator.follow_path(iter(rest), [s], s) - for s in scopes) + scope, rest = self.follow_file_system() + if rest: + # follow the rest of the import (not FS -> classes, functions) + return evaluator.follow_path(iter(rest), [scope], scope) + return [scope] def follow_file_system(self): if self.file_path: @@ -382,7 +364,7 @@ class Importer(object): current_namespace = follow_str(rel_path, '__init__') elif current_namespace[2]: # is a package for n in self.namespace_packages(current_namespace[1], - self.import_path[:i]): + self.import_path[:i]): try: current_namespace = follow_str(n, s) if current_namespace[1]: