forked from VimPlug/jedi
Avoid failing if additional dynamic modules is defined with files that don't exist
This commit is contained in:
@@ -21,7 +21,7 @@ from jedi._compatibility import (FileNotFoundError, ImplicitNSInfo,
|
||||
force_unicode, unicode)
|
||||
from jedi import debug
|
||||
from jedi import settings
|
||||
from jedi.file_io import KnownContentFileIO, FolderIO
|
||||
from jedi.file_io import KnownContentFileIO, FolderIO, FileIO
|
||||
from jedi.parser_utils import get_cached_code_lines
|
||||
from jedi.evaluate import sys_path
|
||||
from jedi.evaluate import helpers
|
||||
@@ -532,7 +532,10 @@ def get_modules_containing_name(evaluator, modules, name):
|
||||
if name not in code:
|
||||
return None
|
||||
new_file_io = KnownContentFileIO(file_io.path, code)
|
||||
return _load_module_from_path(evaluator, new_file_io, base_names)
|
||||
m = _load_module_from_path(evaluator, new_file_io, base_names)
|
||||
if isinstance(m, compiled.CompiledObject):
|
||||
return None
|
||||
return m
|
||||
|
||||
# skip non python modules
|
||||
used_mod_paths = set()
|
||||
@@ -551,13 +554,17 @@ def get_modules_containing_name(evaluator, modules, name):
|
||||
if not settings.dynamic_params_for_other_modules:
|
||||
return
|
||||
|
||||
def get_file_ios_to_check():
|
||||
for folder_io, base_names in folders_with_names_to_be_checked:
|
||||
for file_io in check_directory(folder_io):
|
||||
yield file_io, base_names
|
||||
|
||||
for p in settings.additional_dynamic_modules:
|
||||
p = os.path.abspath(p)
|
||||
if p not in used_mod_paths:
|
||||
folders_with_names_to_be_checked.append((FolderIO(p), None))
|
||||
yield FileIO(p), None
|
||||
|
||||
for folder_io, base_names in folders_with_names_to_be_checked:
|
||||
for file_io in check_directory(folder_io):
|
||||
for file_io, base_names in get_file_ios_to_check():
|
||||
m = check_fs(file_io, base_names)
|
||||
if m is not None and not isinstance(m, compiled.CompiledObject):
|
||||
if m is not None:
|
||||
yield m
|
||||
|
||||
@@ -21,3 +21,14 @@ def test_base_auto_import_modules(auto_import_json, Script):
|
||||
def test_auto_import_modules_imports(auto_import_json, Script):
|
||||
main, = Script('from json import tool; tool.main').goto_definitions()
|
||||
assert isinstance(main._name, CompiledContextName)
|
||||
|
||||
|
||||
def test_additional_dynamic_modules(monkeypatch, Script):
|
||||
# We could add further tests, but for now it's even more important that
|
||||
# this doesn't fail.
|
||||
monkeypatch.setattr(
|
||||
settings,
|
||||
'additional_dynamic_modules',
|
||||
['/foo/bar/jedi_not_existing_file.py']
|
||||
)
|
||||
assert not Script('def some_func(f):\n f.').completions()
|
||||
|
||||
Reference in New Issue
Block a user