diff --git a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py index 6b5d56a4392..ac3e51e9ff4 100644 --- a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py +++ b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py @@ -63,10 +63,21 @@ def write_peps_json(peps: list[parser.PEP], path: Path) -> None: def create_pep_zero(app: Sphinx, env: BuildEnvironment, docnames: list[str]) -> None: peps = _parse_peps(Path(app.srcdir)) - numerical_index_text = writer.PEPZeroWriter().write_numerical_index(peps) + release_peps = { + pep.python_version: pep.number + for pep in peps + if pep.python_version + and "release" in pep.topic + } + + numerical_index_text = writer.PEPZeroWriter( + release_peps + ).write_numerical_index(peps) subindices.update_sphinx("numerical", numerical_index_text, docnames, env) - pep0_text = writer.PEPZeroWriter().write_pep0(peps, builder=env.settings["builder"]) + pep0_text = writer.PEPZeroWriter( + release_peps + ).write_pep0(peps, builder=env.settings["builder"]) pep0_path = subindices.update_sphinx("pep-0000", pep0_text, docnames, env) peps.append(parser.PEP(pep0_path)) diff --git a/pep_sphinx_extensions/pep_zero_generator/writer.py b/pep_sphinx_extensions/pep_zero_generator/writer.py index c00860c7a8c..8289474c161 100644 --- a/pep_sphinx_extensions/pep_zero_generator/writer.py +++ b/pep_sphinx_extensions/pep_zero_generator/writer.py @@ -59,8 +59,9 @@ class PEPZeroWriter: 801: "Warsaw", } - def __init__(self): + def __init__(self, release_peps: dict[str, int] | None = None): self.output: list[str] = [] + self.release_peps = release_peps or {} def emit_text(self, content: str) -> None: # Appends content argument to the output list @@ -87,7 +88,14 @@ def emit_pep_row( self.emit_text(f" - :pep:`{title.replace('`', '')} <{number}>`") self.emit_text(f" - {authors}") if python_version is not None: - self.emit_text(f" - {python_version}") + pep_number = self.release_peps.get(python_version) + + if pep_number is not None: + self.emit_text( + f" - :pep:`{python_version} <{pep_number}>`" + ) + else: + self.emit_text(f" - {python_version}") def emit_column_headers(self, *, include_version=True) -> None: """Output the column headers for the PEP indices.""" diff --git a/pep_sphinx_extensions/tests/pep_zero_generator/test_writer.py b/pep_sphinx_extensions/tests/pep_zero_generator/test_writer.py index 3237dfb0562..4407f8f8224 100644 --- a/pep_sphinx_extensions/tests/pep_zero_generator/test_writer.py +++ b/pep_sphinx_extensions/tests/pep_zero_generator/test_writer.py @@ -86,3 +86,20 @@ def test_sort_authors(): # Assert assert out == ["Aardvark, Alfred", "lowercase, laurence", "Zebra, Zoƫ"] + + +def test_emit_pep_row_links_python_version_to_release_pep(): + # Arrange + pep0_writer = writer.PEPZeroWriter(release_peps={"3.14": 745}) + + # Act + pep0_writer.emit_pep_row( + shorthand="Active", + number=999, + title="Test PEP", + authors="Test Author", + python_version="3.14", + ) + + # Assert + assert " - :pep:`3.14 <745>`" in pep0_writer.output