mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-09 07:14:48 +08:00
ImportError detection
This commit is contained in:
@@ -588,14 +588,14 @@ class Script(object):
|
|||||||
def analysis(self):
|
def analysis(self):
|
||||||
statements = set(chain(*self._parser.module().used_names.values()))
|
statements = set(chain(*self._parser.module().used_names.values()))
|
||||||
for stmt in statements:
|
for stmt in statements:
|
||||||
if stmt.start_pos[0] != 32:
|
if stmt.start_pos[0] != 254:
|
||||||
continue
|
continue
|
||||||
if isinstance(stmt, pr.Import):
|
if isinstance(stmt, pr.Import):
|
||||||
imports.strip_imports(self._evaluator, [stmt])
|
imports.strip_imports(self._evaluator, [stmt])
|
||||||
else:
|
else:
|
||||||
self._evaluator.eval_statement(stmt)
|
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))
|
print(repr(error))
|
||||||
raise AssertionError
|
raise AssertionError
|
||||||
return self._evaluator.analysis
|
return self._evaluator.analysis
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from jedi import debug
|
|||||||
|
|
||||||
CODES = {
|
CODES = {
|
||||||
'attribute-error': (1, 'Potential AttributeError.'),
|
'attribute-error': (1, 'Potential AttributeError.'),
|
||||||
|
'import-error': (2, 'Potential ImportError.'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ from jedi.evaluate import helpers
|
|||||||
from jedi import settings
|
from jedi import settings
|
||||||
from jedi.common import source_to_unicode
|
from jedi.common import source_to_unicode
|
||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
|
from jedi.evaluate import analysis
|
||||||
from jedi.evaluate.cache import memoize_default, NO_DEFAULT
|
from jedi.evaluate.cache import memoize_default, NO_DEFAULT
|
||||||
|
|
||||||
|
|
||||||
@@ -170,7 +171,7 @@ class ImportWrapper(pr.Base):
|
|||||||
try:
|
try:
|
||||||
scope, rest = self._importer.follow_file_system()
|
scope, rest = self._importer.follow_file_system()
|
||||||
except ModuleNotFound:
|
except ModuleNotFound:
|
||||||
debug.warning('Module not found: %s', self.import_stmt)
|
analysis.add(self._evaluator, 'import-error', self.import_stmt)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if self._is_nested_import():
|
if self._is_nested_import():
|
||||||
@@ -204,6 +205,8 @@ class ImportWrapper(pr.Base):
|
|||||||
else:
|
else:
|
||||||
scopes = [ImportWrapper.GlobalNamespace]
|
scopes = [ImportWrapper.GlobalNamespace]
|
||||||
debug.dbg('after import: %s', scopes)
|
debug.dbg('after import: %s', scopes)
|
||||||
|
if not scopes:
|
||||||
|
analysis.add(self._evaluator, 'import-error', self.import_stmt)
|
||||||
self._evaluator.recursion_detector.pop_stmt()
|
self._evaluator.recursion_detector.pop_stmt()
|
||||||
return scopes
|
return scopes
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user