Proper loading for third-party stub packages

This commit is contained in:
Dave Halter
2019-05-16 00:45:09 +02:00
parent 4f64dd30f9
commit 051db30dfb
7 changed files with 40 additions and 2 deletions

View File

@@ -185,8 +185,12 @@ def _try_to_load_stub(evaluator, import_names, actual_context_set,
# 4. Try to load pyi file somewhere if actual_context_set was not defined.
if not actual_context_set:
if parent_module_context is not None:
# TODO this attribute doesn't always exist
check_path = parent_module_context.py__path__()
try:
method = parent_module_context.py__path__
except AttributeError:
check_path = []
else:
check_path = method()
# In case import_names
names_for_path = (import_names[-1],)
else:

View File

@@ -0,0 +1 @@
foo: int

View File

@@ -0,0 +1,2 @@
both: int
stub_only: str

View File

@@ -0,0 +1 @@
in_sub_module: int

View File

@@ -0,0 +1,2 @@
python_only = 1
both = ''

View File

@@ -0,0 +1 @@
in_sub_module = ''

View File

@@ -0,0 +1,27 @@
from functools import partial
from test.helpers import get_example_dir
from jedi.api.project import Project
import pytest
@pytest.fixture
def ScriptInStubFolder(Script):
path = get_example_dir('stub_packages')
project = Project(path, sys_path=[path], smart_sys_path=False)
return partial(Script, _project=project)
@pytest.mark.parametrize(
('code', 'expected'), [
('from no_python import foo', ['int']),
('from with_python import stub_only', ['str']),
('from with_python import python_only', []),
('from with_python import both', ['int']),
('from with_python import something_random', []),
('from with_python.module import in_sub_module', ['int']),
]
)
def test_find_stubs_infer(ScriptInStubFolder, code, expected):
defs = ScriptInStubFolder(code).goto_definitions()
assert [d.name for d in defs] == expected