Skip to content

Commit 727787b

Browse files
committed
Allow extensions to define the keys returned by linkcode ext
1 parent 23c9cb4 commit 727787b

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

doc/extdev/appapi.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ package.
7979

8080
.. automethod:: Sphinx.add_autodoc_attrgetter
8181

82+
.. automethod:: Sphinx.add_linkcode_domain
83+
8284
.. automethod:: Sphinx.add_search_language
8385

8486
.. automethod:: Sphinx.add_source_suffix

sphinx/application.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,6 +1178,15 @@ def add_autodoc_attrgetter(self, typ: type, getter: Callable[[Any, str, Any], An
11781178
logger.debug('[app] adding autodoc attrgetter: %r', (typ, getter))
11791179
self.registry.add_autodoc_attrgetter(typ, getter)
11801180

1181+
def add_linkcode_domain(self, domain: str, keys: list[str]) -> None:
1182+
"""Register a new list of keys to use for a domain by the
1183+
:mod:`sphinx.ext.linkcode` extension.
1184+
1185+
.. versionadded:: 7.3
1186+
"""
1187+
from sphinx.ext.linkcode import domain_keys
1188+
domain_keys[domain] = keys
1189+
11811190
def add_search_language(self, cls: Any) -> None:
11821191
"""Register a new language for the HTML search index.
11831192

sphinx/ext/linkcode.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
from sphinx.application import Sphinx
1818

1919

20+
domain_keys = {
21+
'py': ['module', 'fullname'],
22+
'c': ['names'],
23+
'cpp': ['names'],
24+
'js': ['object', 'fullname'],
25+
}
26+
27+
2028
class LinkcodeError(SphinxError):
2129
category = "linkcode error"
2230

@@ -30,13 +38,6 @@ def doctree_read(app: Sphinx, doctree: Node) -> None:
3038
raise LinkcodeError(msg)
3139
assert resolve_target is not None # for mypy
3240

33-
domain_keys = {
34-
'py': ['module', 'fullname'],
35-
'c': ['names'],
36-
'cpp': ['names'],
37-
'js': ['object', 'fullname'],
38-
}
39-
4041
for objnode in list(doctree.findall(addnodes.desc)):
4142
domain = objnode.get('domain')
4243
uris: set[str] = set()

0 commit comments

Comments
 (0)