forked from VimPlug/jedi
Better module loading
This commit is contained in:
+18
-15
@@ -368,7 +368,9 @@ class Importer(object):
|
|||||||
return NO_CONTEXTS
|
return NO_CONTEXTS
|
||||||
|
|
||||||
module = _load_module(
|
module = _load_module(
|
||||||
self._evaluator, module_path, code, sys_path, parent_module
|
self._evaluator, module_path, code, sys_path, parent_module,
|
||||||
|
module_name=module_name,
|
||||||
|
safe_module_name=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
if module is None:
|
if module is None:
|
||||||
@@ -376,7 +378,6 @@ class Importer(object):
|
|||||||
# importable.
|
# importable.
|
||||||
return NO_CONTEXTS
|
return NO_CONTEXTS
|
||||||
|
|
||||||
self._evaluator.module_cache.add(module, module_name)
|
|
||||||
return ContextSet(module)
|
return ContextSet(module)
|
||||||
|
|
||||||
def _generate_name(self, name, in_module=None):
|
def _generate_name(self, name, in_module=None):
|
||||||
@@ -466,7 +467,8 @@ class Importer(object):
|
|||||||
return names
|
return names
|
||||||
|
|
||||||
|
|
||||||
def _load_module(evaluator, path=None, code=None, sys_path=None, parent_module=None):
|
def _load_module(evaluator, path=None, code=None, sys_path=None,
|
||||||
|
parent_module=None, module_name=None, safe_module_name=False):
|
||||||
if isinstance(path, ImplicitNSInfo):
|
if isinstance(path, ImplicitNSInfo):
|
||||||
from jedi.evaluate.context.namespace import ImplicitNamespaceContext
|
from jedi.evaluate.context.namespace import ImplicitNamespaceContext
|
||||||
module = ImplicitNamespaceContext(
|
module = ImplicitNamespaceContext(
|
||||||
@@ -490,15 +492,18 @@ def _load_module(evaluator, path=None, code=None, sys_path=None, parent_module=N
|
|||||||
module = ModuleContext(evaluator, module_node, path=path)
|
module = ModuleContext(evaluator, module_node, path=path)
|
||||||
else:
|
else:
|
||||||
module = compiled.load_module(evaluator, path=path, sys_path=sys_path)
|
module = compiled.load_module(evaluator, path=path, sys_path=sys_path)
|
||||||
|
add_module(evaluator, module_name, module, safe=safe_module_name)
|
||||||
return module
|
return module
|
||||||
|
|
||||||
|
|
||||||
def add_module(evaluator, module_name, module):
|
def add_module(evaluator, module_name, module, safe=False):
|
||||||
if '.' not in module_name:
|
if module_name is not None:
|
||||||
# We cannot add paths with dots, because that would collide with
|
if not safe and '.' not in module_name:
|
||||||
# the sepatator dots for nested packages. Therefore we return
|
# We cannot add paths with dots, because that would collide with
|
||||||
# `__main__` in ModuleWrapper.py__name__(), which is similar to
|
# the sepatator dots for nested packages. Therefore we return
|
||||||
# Python behavior.
|
# `__main__` in ModuleWrapper.py__name__(), which is similar to
|
||||||
|
# Python behavior.
|
||||||
|
return
|
||||||
evaluator.module_cache.add(module, module_name)
|
evaluator.module_cache.add(module, module_name)
|
||||||
|
|
||||||
|
|
||||||
@@ -536,13 +541,11 @@ def get_modules_containing_name(evaluator, modules, name):
|
|||||||
code = python_bytes_to_unicode(f.read(), errors='replace')
|
code = python_bytes_to_unicode(f.read(), errors='replace')
|
||||||
if name in code:
|
if name in code:
|
||||||
e_sys_path = evaluator.get_sys_path()
|
e_sys_path = evaluator.get_sys_path()
|
||||||
module = _load_module(evaluator, path, code, sys_path=e_sys_path)
|
module_name = sys_path.dotted_path_in_sys_path(e_sys_path, path)
|
||||||
|
module = _load_module(
|
||||||
module_name = sys_path.dotted_path_in_sys_path(
|
evaluator, path, code,
|
||||||
e_sys_path, path
|
sys_path=e_sys_path, module_name=module_name
|
||||||
)
|
)
|
||||||
if module_name is not None:
|
|
||||||
add_module(evaluator, module_name, module)
|
|
||||||
return module
|
return module
|
||||||
|
|
||||||
# skip non python modules
|
# skip non python modules
|
||||||
|
|||||||
Reference in New Issue
Block a user