/
references.py
54 lines (38 loc) · 1.49 KB
/
references.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
sphinx.transforms.references
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Docutils transforms used by Sphinx.
:copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
from typing import Any, Dict
from docutils.transforms.references import DanglingReferences
from sphinx.transforms import SphinxTransform
if False:
# For type annotation
from sphinx.application import Sphinx
class SphinxDanglingReferences(DanglingReferences):
"""DanglingReferences transform which does not output info messages."""
def apply(self, **kwargs: Any) -> None:
try:
reporter = self.document.reporter
report_level = reporter.report_level
# suppress INFO level messages for a while
reporter.report_level = max(reporter.WARNING_LEVEL, reporter.report_level)
super().apply()
finally:
reporter.report_level = report_level
class SphinxDomains(SphinxTransform):
"""Collect objects to Sphinx domains for cross references."""
default_priority = 850
def apply(self, **kwargs: Any) -> None:
for domain in self.env.domains.values():
domain.process_doc(self.env, self.env.docname, self.document)
def setup(app: "Sphinx") -> Dict[str, Any]:
app.add_transform(SphinxDanglingReferences)
app.add_transform(SphinxDomains)
return {
'version': 'builtin',
'parallel_read_safe': True,
'parallel_write_safe': True,
}