1
0
forked from VimPlug/jedi

Some analysis improvements.

This commit is contained in:
Dave Halter
2016-12-11 15:03:19 +01:00
parent 2be5da3f85
commit eaf0100446
12 changed files with 137 additions and 131 deletions
+13 -23
View File
@@ -147,10 +147,10 @@ class NestedImportModule(tree.Module):
self._nested_import)
def _add_error(evaluator, name, message=None):
def _add_error(context, name, message=None):
# Should be a name, not a string!
if hasattr(name, 'parent'):
# Should be a name, not a string!
analysis.add(evaluator, 'import-error', name, message)
analysis.add(context, 'import-error', name, message)
def get_init_path(directory_path):
@@ -168,25 +168,21 @@ def get_init_path(directory_path):
class ImportName(AbstractNameDefinition):
start_pos = (1, 0)
def __init__(self, parent_module, string_name):
self.parent_module = parent_module
def __init__(self, parent_context, string_name):
self.parent_context = parent_context
self.string_name = string_name
def infer(self):
return Importer(
self.parent_module.evaluator,
self.parent_context.evaluator,
[self.string_name],
self.parent_module,
self.parent_context,
).follow()
def get_root_context(self):
# Not sure if this is correct.
return self.parent_context.get_root_context()
@property
def parent_context(self):
return self.parent_module
@property
def api_type(self):
return 'module'
@@ -195,18 +191,12 @@ class ImportName(AbstractNameDefinition):
class SubModuleName(ImportName):
def infer(self):
return Importer(
self.parent_module.evaluator,
self.parent_context.evaluator,
[self.string_name],
self.parent_module,
self.parent_context,
level=1
).follow()
@property
def parent_context(self):
# This is a bit of a special case. But it seems like it's working well.
# Since a SubModuleName is basically a lazy name to a module
return next(iter(self.infer()))
class Importer(object):
def __init__(self, evaluator, import_path, module_context, level=0):
@@ -249,7 +239,7 @@ class Importer(object):
if dir_name:
import_path.insert(0, dir_name)
else:
_add_error(self._evaluator, import_path[-1])
_add_error(module_context, import_path[-1])
import_path = []
# TODO add import error.
debug.warning('Attempted relative import beyond top-level package.')
@@ -336,7 +326,7 @@ class Importer(object):
method = parent_module.py__path__
except AttributeError:
# The module is not a package.
_add_error(self._evaluator, import_path[-1])
_add_error(parent_module, import_path[-1])
return set()
else:
paths = method()
@@ -351,7 +341,7 @@ class Importer(object):
except ImportError:
module_path = None
if module_path is None:
_add_error(self._evaluator, import_path[-1])
_add_error(parent_module, import_path[-1])
return set()
else:
parent_module = None
@@ -367,7 +357,7 @@ class Importer(object):
sys.path = temp
except ImportError:
# The module is not a package.
_add_error(self._evaluator, import_path[-1])
_add_error(parent_module, import_path[-1])
return set()
source = None