diff options
Diffstat (limited to 'sphinx/transforms/references.py')
-rw-r--r-- | sphinx/transforms/references.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/sphinx/transforms/references.py b/sphinx/transforms/references.py new file mode 100644 index 0000000..5de3a95 --- /dev/null +++ b/sphinx/transforms/references.py @@ -0,0 +1,47 @@ +"""Docutils transforms used by Sphinx.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + +from docutils.transforms.references import DanglingReferences + +from sphinx.transforms import SphinxTransform + +if TYPE_CHECKING: + 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, + } |