Skip to content

Commit a0cd666

Browse files
committed
intersphinx: Simplify domain detection in IntersphinxRole.run()
1 parent f1ffe22 commit a0cd666

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

sphinx/ext/intersphinx/_resolve.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from sphinx.util.osutil import _relative_path
1919

2020
if TYPE_CHECKING:
21-
from collections.abc import Iterable, Set
21+
from collections.abc import Iterable, Sequence, Set
2222
from types import ModuleType
2323
from typing import Any
2424

@@ -404,27 +404,30 @@ def run(self) -> tuple[list[Node], list[system_message]]:
404404
else:
405405
# the user did not specify a domain,
406406
# so we check first the default (if available) then standard domains
407-
domains: list[Domain] = []
408-
if default_domain := self.env.current_document.default_domain:
409-
domains.append(default_domain)
410-
if (
411-
std_domain := self.env.domains.standard_domain
412-
) is not None and std_domain not in domains:
413-
domains.append(std_domain)
407+
default_domain = self.env.current_document.default_domain
408+
std_domain = self.env.domains.standard_domain
409+
domains: Sequence[Domain]
410+
if default_domain is None or std_domain == default_domain:
411+
domains = (std_domain,)
412+
else:
413+
domains = (default_domain, std_domain)
414414

415415
role_func = None
416416
for domain in domains:
417-
if (role_func := domain.roles.get(role_name)) is not None:
417+
role_func = domain.roles.get(role_name)
418+
if role_func is not None:
418419
domain_name = domain.name
419420
break
420421

421422
if role_func is None or domain_name is None:
422-
domains_str = self._concat_strings(d.name for d in domains)
423+
domains_str = self._concat_strings(domain.name for domain in domains)
423424
msg = 'role for external cross-reference not found in domains %s: %r'
424-
possible_roles: set[str] = set()
425-
for d in domains:
426-
if o := d.object_types.get(role_name):
427-
possible_roles.update(f'{d.name}:{r}' for r in o.roles)
425+
possible_roles: set[str] = {
426+
f'{domain.name}:{r}'
427+
for domain in domains
428+
if (object_types := domain.object_types.get(role_name))
429+
for r in object_types.roles
430+
}
428431
if possible_roles:
429432
msg = f'{msg} (perhaps you meant one of: %s)'
430433
self._emit_warning(

0 commit comments

Comments
 (0)