From 02d1e1aa4209dbb08678fcf27ede59ac6f20d585 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 12 May 2014 11:03:27 +0200 Subject: [PATCH] fix static analysis for nested imports --- jedi/api/__init__.py | 10 +++++++--- test/static_analysis/imports.py | 5 +++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index ac2436ad..26d3a1dc 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -35,6 +35,7 @@ from jedi.evaluate import imports from jedi.evaluate.helpers import FakeName from jedi.evaluate.finder import get_names_of_scope from jedi.evaluate.helpers import search_call_signatures +from jedi.evaluate import analysis # Jedi uses lots and lots of recursion. By setting this a little bit higher, we # can remove some "maximum recursion depth" errors. @@ -589,12 +590,15 @@ class Script(object): statements = set(chain(*self._parser.module().used_names.values())) for stmt in statements: if isinstance(stmt, pr.Import): - imports.strip_imports(self._evaluator, [stmt]) + imps = imports.ImportWrapper(self._evaluator, stmt, + direct_resolve=True).follow() + if stmt.is_nested() and any(not isinstance(i, pr.Module) for i in imps): + analysis.add(self._evaluator, 'import-error', stmt) else: self._evaluator.eval_statement(stmt) - analysis = [a for a in self._evaluator.analysis if self.path == a.path] - return sorted(set(analysis), key=lambda x: x.line) + ana = [a for a in self._evaluator.analysis if self.path == a.path] + return sorted(set(ana), key=lambda x: x.line) class Interpreter(Script): diff --git a/test/static_analysis/imports.py b/test/static_analysis/imports.py index 41a4ef96..4d43fac4 100644 --- a/test/static_analysis/imports.py +++ b/test/static_analysis/imports.py @@ -16,3 +16,8 @@ date.not_existing_attribute #! import-error from datetime.date import today + +#! import-error +import datetime.date + +import os.path