From c59a8dce281d2862d003c878db645018bf515165 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 11 May 2014 01:54:25 +0200 Subject: [PATCH] ImportError detection --- jedi/api/__init__.py | 4 ++-- jedi/evaluate/analysis.py | 1 + jedi/evaluate/imports.py | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index de1d24bb..55cabe1f 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -588,14 +588,14 @@ class Script(object): def analysis(self): statements = set(chain(*self._parser.module().used_names.values())) for stmt in statements: - if stmt.start_pos[0] != 32: + if stmt.start_pos[0] != 254: continue if isinstance(stmt, pr.Import): imports.strip_imports(self._evaluator, [stmt]) else: self._evaluator.eval_statement(stmt) - for error in self._evaluator.analysis: + for error in sorted(self._evaluator.analysis, key=lambda x: x.line): print(repr(error)) raise AssertionError return self._evaluator.analysis diff --git a/jedi/evaluate/analysis.py b/jedi/evaluate/analysis.py index 19a2ba10..88e3cf47 100644 --- a/jedi/evaluate/analysis.py +++ b/jedi/evaluate/analysis.py @@ -7,6 +7,7 @@ from jedi import debug CODES = { 'attribute-error': (1, 'Potential AttributeError.'), + 'import-error': (2, 'Potential ImportError.'), } diff --git a/jedi/evaluate/imports.py b/jedi/evaluate/imports.py index 59e73a7b..48ac11a0 100644 --- a/jedi/evaluate/imports.py +++ b/jedi/evaluate/imports.py @@ -27,6 +27,7 @@ from jedi.evaluate import helpers from jedi import settings 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 @@ -170,7 +171,7 @@ class ImportWrapper(pr.Base): try: scope, rest = self._importer.follow_file_system() except ModuleNotFound: - debug.warning('Module not found: %s', self.import_stmt) + analysis.add(self._evaluator, 'import-error', self.import_stmt) return [] if self._is_nested_import(): @@ -204,6 +205,8 @@ class ImportWrapper(pr.Base): else: scopes = [ImportWrapper.GlobalNamespace] debug.dbg('after import: %s', scopes) + if not scopes: + analysis.add(self._evaluator, 'import-error', self.import_stmt) self._evaluator.recursion_detector.pop_stmt() return scopes