"""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, }