mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 14:04:26 +08:00
Improve pytest plugin loading
This commit is contained in:
@@ -181,10 +181,12 @@ def _iter_pytest_modules(module_context, skip_own_module=False):
|
|||||||
if Path(file_io.path) != module_context.py__file__():
|
if Path(file_io.path) != module_context.py__file__():
|
||||||
try:
|
try:
|
||||||
m = load_module_from_path(module_context.inference_state, file_io)
|
m = load_module_from_path(module_context.inference_state, file_io)
|
||||||
pytest_plugins_pointer = m.goto("pytest_plugins")
|
conftest_module = m.as_context()
|
||||||
if pytest_plugins_pointer:
|
plugins_list = m.tree_node.get_used_names().get("pytest_plugins")
|
||||||
yield from _load_pytest_plugins(module_context, pytest_plugins_pointer[0])
|
if plugins_list:
|
||||||
yield m.as_context()
|
name = conftest_module.create_name(plugins_list[0])
|
||||||
|
yield from _load_pytest_plugins(module_context, name)
|
||||||
|
yield conftest_module
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
folder = folder.get_parent_folder()
|
folder = folder.get_parent_folder()
|
||||||
@@ -198,15 +200,15 @@ def _iter_pytest_modules(module_context, skip_own_module=False):
|
|||||||
for module_value in module_context.inference_state.import_module(names):
|
for module_value in module_context.inference_state.import_module(names):
|
||||||
yield module_value.as_context()
|
yield module_value.as_context()
|
||||||
|
|
||||||
|
def _load_pytest_plugins(module_context, name):
|
||||||
|
from jedi.inference.helpers import get_str_or_none
|
||||||
|
|
||||||
def _load_pytest_plugins(module_context, plugins_pointers):
|
for inferred in name.infer():
|
||||||
from jedi.inference.value import iterable
|
for seq_value in inferred.py__iter__():
|
||||||
from parso.python.tree import String
|
for value in seq_value.infer():
|
||||||
for inferred in plugins_pointers.infer():
|
fq_name = get_str_or_none(value)
|
||||||
if isinstance(inferred, iterable.SequenceLiteralValue):
|
if fq_name:
|
||||||
for value in inferred.get_tree_entries():
|
names = fq_name.split(".")
|
||||||
if isinstance(value, String):
|
|
||||||
names = eval(value.value).split(".")
|
|
||||||
for module_value in module_context.inference_state.import_module(names):
|
for module_value in module_context.inference_state.import_module(names):
|
||||||
yield module_value.as_context()
|
yield module_value.as_context()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user