Skip to content

Commit 6ee0ecb

Browse files
committed
intersphinx role, simplify role name matching
1 parent 3bf8bcd commit 6ee0ecb

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

sphinx/ext/intersphinx.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import concurrent.futures
2727
import functools
2828
import posixpath
29+
import re
2930
import sys
3031
import time
3132
from os import path
@@ -485,6 +486,11 @@ def role(self, role_name: str, language_module: ModuleType, lineno: int, reporte
485486

486487

487488
class IntersphinxRole(SphinxRole):
489+
# group 1: just for the optionality of the inventory name
490+
# group 2: the inventory name (optional)
491+
# group 3: the domain:role or role part
492+
_re_inv_ref = re.compile(r"(\+([^:]+))?:(.*)")
493+
488494
def __init__(self, orig_name: str) -> None:
489495
self.orig_name = orig_name
490496

@@ -513,20 +519,13 @@ def run(self) -> Tuple[List[Node], List[system_message]]:
513519
def get_inventory_and_name_suffix(self, name: str) -> Tuple[Optional[str], str]:
514520
assert name.startswith('external'), name
515521
assert name[8] in ':+', name
516-
typ = name[8]
517-
name = name[9:]
518-
if typ == '+':
519-
# we have an explicit inventory name, i.e,
520-
# :external+inv:role: or
521-
# :external+inv:domain:role:
522-
inv, name = name.split(':', 1)
523-
return inv, name
524-
else:
525-
assert typ == ':'
526-
# we look in all inventories, i.e.,
527-
# :external:role: or
528-
# :external:domain:role:
529-
return None, name
522+
# either we have an explicit inventory name, i.e,
523+
# :external+inv:role: or
524+
# :external+inv:domain:role:
525+
# or we look in all inventories, i.e.,
526+
# :external:role: or
527+
# :external:domain:role:
528+
return IntersphinxRole._re_inv_ref.fullmatch(name, 8).group(2, 3)
530529

531530
def get_role_name(self, name: str) -> Optional[Tuple[str, str]]:
532531
names = name.split(':')

0 commit comments

Comments
 (0)