mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 05:54:25 +08:00
Proper loading for third-party stub packages
This commit is contained in:
@@ -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:
|
||||
|
||||
1
test/examples/stub_packages/no_python-stubs/__init__.pyi
Normal file
1
test/examples/stub_packages/no_python-stubs/__init__.pyi
Normal file
@@ -0,0 +1 @@
|
||||
foo: int
|
||||
@@ -0,0 +1,2 @@
|
||||
both: int
|
||||
stub_only: str
|
||||
1
test/examples/stub_packages/with_python-stubs/module.pyi
Normal file
1
test/examples/stub_packages/with_python-stubs/module.pyi
Normal file
@@ -0,0 +1 @@
|
||||
in_sub_module: int
|
||||
2
test/examples/stub_packages/with_python/__init__.py
Normal file
2
test/examples/stub_packages/with_python/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
python_only = 1
|
||||
both = ''
|
||||
1
test/examples/stub_packages/with_python/module.py
Normal file
1
test/examples/stub_packages/with_python/module.py
Normal file
@@ -0,0 +1 @@
|
||||
in_sub_module = ''
|
||||
27
test/test_evaluate/test_gradual/test_stub_loading.py
Normal file
27
test/test_evaluate/test_gradual/test_stub_loading.py
Normal 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
|
||||
Reference in New Issue
Block a user