1818 from sphinx .util .typing import ExtensionMetadata
1919
2020
21+ _DOMAIN_KEYS = {
22+ 'py' : ['module' , 'fullname' ],
23+ 'c' : ['names' ],
24+ 'cpp' : ['names' ],
25+ 'js' : ['object' , 'fullname' ],
26+ }
27+
28+
29+ def add_linkcode_domain (domain : str , keys : list [str ], override : bool = False ) -> None :
30+ """Register a new list of keys to use for a domain.
31+
32+ .. versionadded:: 8.2
33+ """
34+ if override or domain not in _DOMAIN_KEYS :
35+ _DOMAIN_KEYS [domain ] = list (keys )
36+
37+
2138class LinkcodeError (SphinxError ):
2239 category = 'linkcode error'
2340
@@ -37,13 +54,6 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
3754 # ``supported_linkcode`` attribute.
3855 node_only_expr = getattr (app .builder , 'supported_linkcode' , 'html' )
3956
40- domain_keys = {
41- 'py' : ['module' , 'fullname' ],
42- 'c' : ['names' ],
43- 'cpp' : ['names' ],
44- 'js' : ['object' , 'fullname' ],
45- }
46-
4757 for objnode in list (doctree .findall (addnodes .desc )):
4858 domain = objnode .get ('domain' )
4959 uris : set [str ] = set ()
@@ -53,7 +63,7 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
5363
5464 # Convert signode to a specified format
5565 info = {}
56- for key in domain_keys .get (domain , []):
66+ for key in _DOMAIN_KEYS .get (domain , []):
5767 value = signode .get (key )
5868 if not value :
5969 value = ''
0 commit comments