diff --git a/pep_sphinx_extensions/__init__.py b/pep_sphinx_extensions/__init__.py index 1c3383dfd81..4d85656fefd 100644 --- a/pep_sphinx_extensions/__init__.py +++ b/pep_sphinx_extensions/__init__.py @@ -95,6 +95,7 @@ def setup(app: Sphinx) -> dict[str, bool]: ) # Transform PEP references to links app.add_post_transform(pep_references.PEPReferenceRoleTitleText) + app.add_post_transform(pep_references.PEPIntersphinxTitleText) # Register custom directives app.add_directive("pep-banner", pep_banner_directive.PEPBanner) diff --git a/pep_sphinx_extensions/pep_processor/transforms/pep_references.py b/pep_sphinx_extensions/pep_processor/transforms/pep_references.py index cc2840e9208..5a22e244829 100644 --- a/pep_sphinx_extensions/pep_processor/transforms/pep_references.py +++ b/pep_sphinx_extensions/pep_processor/transforms/pep_references.py @@ -1,3 +1,4 @@ +import re from pathlib import Path from docutils import nodes, transforms @@ -33,3 +34,25 @@ def apply(self) -> None: node["reftitle"] += f" ยง {target_ids[fragment][0].astext()}" except KeyError: pass + + +class PEPIntersphinxTitleText(transforms.Transform): + """Remove version numbers from intersphinx reference title text. + + Intersphinx sets ``reftitle`` to "(in v)" from the + target's inventory. Version changes between builds make otherwise-unchanged + pages appear modified in Read the Docs PR previews. + """ + + # Run after Sphinx's ReferencesResolver (priority 10) has resolved + # intersphinx references + default_priority = 740 + + version_pattern = re.compile(r"^\(in (.+?) v?\d[^\s)]*\)$") + + def apply(self) -> None: + for node in self.document.findall(nodes.reference): + if node.get("internal", True): + continue + reftitle = node.get("reftitle", "") + node["reftitle"] = self.version_pattern.sub(r"(in \1)", reftitle) diff --git a/peps/conf.py b/peps/conf.py index a8e986869ab..9766d91fa0c 100644 --- a/peps/conf.py +++ b/peps/conf.py @@ -70,7 +70,7 @@ # Intersphinx configuration (keep this in alphabetical order) intersphinx_mapping = { "devguide": ("https://devguide.python.org", None), - "mypy": ("https://mypy.readthedocs.io/en/latest", None), + "mypy": ("https://mypy.readthedocs.io/en/stable", None), "packaging": ("https://packaging.python.org/en/latest", None), "py3.11": ("https://docs.python.org/3.11", None), "py3.12": ("https://docs.python.org/3.12", None),