mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
intersphinx: Avoid passing the full `BuildEnvironment
` object
This commit is contained in:
parent
d19eedf51d
commit
4a1efef211
@ -18,7 +18,7 @@ from sphinx.util.docutils import CustomReSTDispatcher, SphinxRole
|
|||||||
from sphinx.util.osutil import _relative_path
|
from sphinx.util.osutil import _relative_path
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Iterable
|
from collections.abc import Iterable, Set
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
@ -27,6 +27,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
from sphinx.application import Sphinx
|
from sphinx.application import Sphinx
|
||||||
from sphinx.domains import Domain
|
from sphinx.domains import Domain
|
||||||
|
from sphinx.domains._domains_container import _DomainsContainer
|
||||||
from sphinx.environment import BuildEnvironment
|
from sphinx.environment import BuildEnvironment
|
||||||
from sphinx.ext.intersphinx._shared import InventoryName
|
from sphinx.ext.intersphinx._shared import InventoryName
|
||||||
from sphinx.util.typing import Inventory, InventoryItem, RoleFunction
|
from sphinx.util.typing import Inventory, InventoryItem, RoleFunction
|
||||||
@ -134,10 +135,10 @@ def _resolve_reference_in_domain_by_target(
|
|||||||
|
|
||||||
|
|
||||||
def _resolve_reference_in_domain(
|
def _resolve_reference_in_domain(
|
||||||
env: BuildEnvironment,
|
|
||||||
inv_name: InventoryName | None,
|
inv_name: InventoryName | None,
|
||||||
inventory: Inventory,
|
inventory: Inventory,
|
||||||
honor_disabled_refs: bool,
|
honor_disabled_refs: bool,
|
||||||
|
disabled_reftypes: Set[str],
|
||||||
domain: Domain,
|
domain: Domain,
|
||||||
objtypes: Iterable[str],
|
objtypes: Iterable[str],
|
||||||
node: pending_xref,
|
node: pending_xref,
|
||||||
@ -159,9 +160,10 @@ def _resolve_reference_in_domain(
|
|||||||
|
|
||||||
# now that the objtypes list is complete we can remove the disabled ones
|
# now that the objtypes list is complete we can remove the disabled ones
|
||||||
if honor_disabled_refs:
|
if honor_disabled_refs:
|
||||||
disabled = set(env.config.intersphinx_disabled_reftypes)
|
|
||||||
obj_types = {
|
obj_types = {
|
||||||
obj_type: None for obj_type in obj_types if obj_type not in disabled
|
obj_type: None
|
||||||
|
for obj_type in obj_types
|
||||||
|
if obj_type not in disabled_reftypes
|
||||||
}
|
}
|
||||||
|
|
||||||
objtypes = [*obj_types.keys()]
|
objtypes = [*obj_types.keys()]
|
||||||
@ -183,34 +185,31 @@ def _resolve_reference_in_domain(
|
|||||||
|
|
||||||
|
|
||||||
def _resolve_reference(
|
def _resolve_reference(
|
||||||
env: BuildEnvironment,
|
|
||||||
inv_name: InventoryName | None,
|
inv_name: InventoryName | None,
|
||||||
|
domains: _DomainsContainer,
|
||||||
inventory: Inventory,
|
inventory: Inventory,
|
||||||
honor_disabled_refs: bool,
|
honor_disabled_refs: bool,
|
||||||
|
disabled_reftypes: Set[str],
|
||||||
node: pending_xref,
|
node: pending_xref,
|
||||||
contnode: TextElement,
|
contnode: TextElement,
|
||||||
) -> nodes.reference | None:
|
) -> nodes.reference | None:
|
||||||
# disabling should only be done if no inventory is given
|
# disabling should only be done if no inventory is given
|
||||||
honor_disabled_refs = honor_disabled_refs and inv_name is None
|
honor_disabled_refs = honor_disabled_refs and inv_name is None
|
||||||
intersphinx_disabled_reftypes = env.config.intersphinx_disabled_reftypes
|
|
||||||
|
|
||||||
if honor_disabled_refs and '*' in intersphinx_disabled_reftypes:
|
if honor_disabled_refs and '*' in disabled_reftypes:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
typ = node['reftype']
|
typ = node['reftype']
|
||||||
if typ == 'any':
|
if typ == 'any':
|
||||||
for domain in env.domains.sorted():
|
for domain in domains.sorted():
|
||||||
if (
|
if honor_disabled_refs and f'{domain.name}:*' in disabled_reftypes:
|
||||||
honor_disabled_refs
|
|
||||||
and f'{domain.name}:*' in intersphinx_disabled_reftypes
|
|
||||||
):
|
|
||||||
continue
|
continue
|
||||||
objtypes: Iterable[str] = domain.object_types.keys()
|
objtypes: Iterable[str] = domain.object_types.keys()
|
||||||
res = _resolve_reference_in_domain(
|
res = _resolve_reference_in_domain(
|
||||||
env,
|
|
||||||
inv_name,
|
inv_name,
|
||||||
inventory,
|
inventory,
|
||||||
honor_disabled_refs,
|
honor_disabled_refs,
|
||||||
|
disabled_reftypes,
|
||||||
domain,
|
domain,
|
||||||
objtypes,
|
objtypes,
|
||||||
node,
|
node,
|
||||||
@ -224,17 +223,22 @@ def _resolve_reference(
|
|||||||
if not domain_name:
|
if not domain_name:
|
||||||
# only objects in domains are in the inventory
|
# only objects in domains are in the inventory
|
||||||
return None
|
return None
|
||||||
if honor_disabled_refs and f'{domain_name}:*' in intersphinx_disabled_reftypes:
|
if honor_disabled_refs and f'{domain_name}:*' in disabled_reftypes:
|
||||||
return None
|
return None
|
||||||
domain = env.get_domain(domain_name)
|
try:
|
||||||
|
domain = domains[domain_name]
|
||||||
|
except KeyError as exc:
|
||||||
|
msg = __('Domain %r is not registered') % domain_name
|
||||||
|
raise ExtensionError(msg) from exc
|
||||||
|
|
||||||
objtypes = domain.objtypes_for_role(typ) or ()
|
objtypes = domain.objtypes_for_role(typ) or ()
|
||||||
if not objtypes:
|
if not objtypes:
|
||||||
return None
|
return None
|
||||||
return _resolve_reference_in_domain(
|
return _resolve_reference_in_domain(
|
||||||
env,
|
|
||||||
inv_name,
|
inv_name,
|
||||||
inventory,
|
inventory,
|
||||||
honor_disabled_refs,
|
honor_disabled_refs,
|
||||||
|
disabled_reftypes,
|
||||||
domain,
|
domain,
|
||||||
objtypes,
|
objtypes,
|
||||||
node,
|
node,
|
||||||
@ -260,10 +264,11 @@ def resolve_reference_in_inventory(
|
|||||||
"""
|
"""
|
||||||
assert inventory_exists(env, inv_name)
|
assert inventory_exists(env, inv_name)
|
||||||
return _resolve_reference(
|
return _resolve_reference(
|
||||||
env,
|
|
||||||
inv_name,
|
inv_name,
|
||||||
|
env.domains,
|
||||||
InventoryAdapter(env).named_inventory[inv_name],
|
InventoryAdapter(env).named_inventory[inv_name],
|
||||||
False,
|
False,
|
||||||
|
frozenset(env.config.intersphinx_disabled_reftypes),
|
||||||
node,
|
node,
|
||||||
contnode,
|
contnode,
|
||||||
)
|
)
|
||||||
@ -280,10 +285,11 @@ def resolve_reference_any_inventory(
|
|||||||
Resolution is tried with the target as is in any inventory.
|
Resolution is tried with the target as is in any inventory.
|
||||||
"""
|
"""
|
||||||
return _resolve_reference(
|
return _resolve_reference(
|
||||||
env,
|
|
||||||
None,
|
None,
|
||||||
|
env.domains,
|
||||||
InventoryAdapter(env).main_inventory,
|
InventoryAdapter(env).main_inventory,
|
||||||
honor_disabled_refs,
|
honor_disabled_refs,
|
||||||
|
frozenset(env.config.intersphinx_disabled_reftypes),
|
||||||
node,
|
node,
|
||||||
contnode,
|
contnode,
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user