| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -86,6 +86,9 @@ jobs: | |||
| 86 | 86 | --fail-if-regression \ | |
| 87 | 87 | --fail-if-improved \ | |
| 88 | 88 | --fail-if-new-news-nit | |
| 89 | + - name: 'Build list of changes' | ||
| 90 | + run: | | ||
| 91 | + make -C Doc/ PYTHON=../python changes | ||
| 89 | 92 | - name: 'Collect HTML IDs' | |
| 90 | 93 | if: github.event_name == 'pull_request' | |
| 91 | 94 | run: python Doc/tools/check-html-ids.py collect Doc/build/html -o Doc/build/html-ids-head.json.gz | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,6 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | 7 | from docutils import nodes | |
| 8 | 8 | from sphinx import addnodes | |
| 9 | + from sphinx.builders.changes import ChangesBuilder | ||
| 9 | 10 | from sphinx.domains.changeset import ( | |
| 10 | 11 | VersionChange, | |
| 11 | 12 | versionlabel_classes, | |
@@ -17,6 +18,7 @@ | |||
| 17 | 18 | if TYPE_CHECKING: | |
| 18 | 19 | from docutils.nodes import Node | |
| 19 | 20 | from sphinx.application import Sphinx | |
| 21 | + from sphinx.environment import BuildEnvironment | ||
| 20 | 22 | from sphinx.util.typing import ExtensionMetadata | |
| 21 | 23 | ||
| 22 | 24 | ||
@@ -146,6 +148,32 @@ def _add_glossary_link(cls, inline: nodes.inline) -> None: | |||
| 146 | 148 | break | |
| 147 | 149 | ||
| 148 | 150 | ||
| 151 | + def _fixup_changesets(app: Sphinx, env: BuildEnvironment) -> None: | ||
| 152 | + changesets = env.get_domain("changeset").changesets | ||
| 153 | + | ||
| 154 | + # The changeset domain records each entry's plain text before SoftDeprecated | ||
| 155 | + # replaces the :term:, so strip the markup before the changes builder renders it. | ||
| 156 | + for entries in changesets.values(): | ||
| 157 | + for i, entry in enumerate(entries): | ||
| 158 | + if entry.type == "soft-deprecated": | ||
| 159 | + entries[i] = entry._replace( | ||
| 160 | + content=SoftDeprecated._TERM_RE.sub(r"\1", entry.content) | ||
| 161 | + ) | ||
| 162 | + | ||
| 163 | + # DeprecatedRemoved entries are recorded under their (deprecated, | ||
| 164 | + # removed) version tuple, which the changes builder ignores. | ||
| 165 | + # Re-file them under both versions. | ||
| 166 | + for versions in [v for v in changesets if isinstance(v, tuple)]: | ||
| 167 | + deprecated, removed = versions | ||
| 168 | + for entry in changesets.pop(versions): | ||
| 169 | + changesets.setdefault(deprecated, []).append( | ||
| 170 | + entry._replace(type="deprecated") | ||
| 171 | + ) | ||
| 172 | + changesets.setdefault(removed, []).append( | ||
| 173 | + entry._replace(type="versionremoved") | ||
| 174 | + ) | ||
| 175 | + | ||
| 176 | + | ||
| 149 | 177 | def setup(app: Sphinx) -> ExtensionMetadata: | |
| 150 | 178 | # Override Sphinx's directives with support for 'next' | |
| 151 | 179 | app.add_directive("versionadded", PyVersionChange, override=True) | |
@@ -155,9 +183,15 @@ def setup(app: Sphinx) -> ExtensionMetadata: | |||
| 155 | 183 | ||
| 156 | 184 | # Register the ``.. deprecated-removed::`` directive | |
| 157 | 185 | app.add_directive("deprecated-removed", DeprecatedRemoved) | |
| 186 | + # _fixup_changesets() changes these entries to 'deprecated'/'versionremoved' | ||
| 187 | + ChangesBuilder.typemap["deprecated-removed"] = "deprecated-removed" | ||
| 158 | 188 | ||
| 159 | 189 | # Register the ``.. soft-deprecated::`` directive | |
| 160 | 190 | app.add_directive("soft-deprecated", SoftDeprecated) | |
| 191 | + ChangesBuilder.typemap["soft-deprecated"] = "soft deprecated" | ||
| 192 | + | ||
| 193 | + # Repair the recorded changesets for the couple of custom directives above | ||
| 194 | + app.connect("env-updated", _fixup_changesets) | ||
| 161 | 195 | ||
| 162 | 196 | return { | |
| 163 | 197 | "version": "1.0", | |
| Back | FazBrowse Home | New Git URL |
0 commit comments