mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 14:34:31 +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.
|
# 4. Try to load pyi file somewhere if actual_context_set was not defined.
|
||||||
if not actual_context_set:
|
if not actual_context_set:
|
||||||
if parent_module_context is not None:
|
if parent_module_context is not None:
|
||||||
# TODO this attribute doesn't always exist
|
try:
|
||||||
check_path = parent_module_context.py__path__()
|
method = parent_module_context.py__path__
|
||||||
|
except AttributeError:
|
||||||
|
check_path = []
|
||||||
|
else:
|
||||||
|
check_path = method()
|
||||||
# In case import_names
|
# In case import_names
|
||||||
names_for_path = (import_names[-1],)
|
names_for_path = (import_names[-1],)
|
||||||
else:
|
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