|
18 | 18 | from sphinx.util.osutil import _relative_path |
19 | 19 |
|
20 | 20 | if TYPE_CHECKING: |
21 | | - from collections.abc import Iterable, Set |
| 21 | + from collections.abc import Iterable, Sequence, Set |
22 | 22 | from types import ModuleType |
23 | 23 | from typing import Any |
24 | 24 |
|
@@ -404,27 +404,30 @@ def run(self) -> tuple[list[Node], list[system_message]]: |
404 | 404 | else: |
405 | 405 | # the user did not specify a domain, |
406 | 406 | # 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) |
414 | 414 |
|
415 | 415 | role_func = None |
416 | 416 | 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: |
418 | 419 | domain_name = domain.name |
419 | 420 | break |
420 | 421 |
|
421 | 422 | 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) |
423 | 424 | 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 | + } |
428 | 431 | if possible_roles: |
429 | 432 | msg = f'{msg} (perhaps you meant one of: %s)' |
430 | 433 | self._emit_warning( |
|
0 commit comments