def get_module_node(effective_sys_path: List[Path], module_name: str) -> Tuple[Optional[Node], Optional[Exception]]:
from .errors import ModuleResolutionError
import_script = create_import_script(effective_sys_path, module_name)
definitions = import_script.goto_definitions()
if definitions:
mod = tz.first(definitions)
if tuple(map(int, jedi.__version__.split('.'))) >= (0,10,1):
# duck punch to avoid mod._name.api_type error, which uses parent_context.
mod._name.parent_context = mod._name.get_root_context()
if mod.module_path:
JediCodeElementNode.usage_resolution_modules |= frozenset((mod._name.get_root_context(),))
node = JediCodeElementNode.from_definition(
role='definition',
call_pos=(mod.module_path, (1,0), (None,None)),
definition=mod)
err = None
else:
node = None
err = ModuleResolutionError(
'Could not resolve module {} (did you mean to use "-f"?)'.format(module_name))
return node, err
评论列表
文章目录