Skip to content

Commit dba992b

Browse files
authored
[3.13] gh-121277: Allow .. versionadded:: next in docs (GH-121278) (#124718)
* gh-121277: Allow `.. versionadded:: next` in docs (GH-121278) Make `versionchanged:: next`` expand to current (unreleased) version. When a new CPython release is cut, the release manager will replace all such occurences of "next" with the just-released version. (See the issue for release-tools and devguide PRs.) Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> (cherry picked from commit 7d24ea9) * gh-121277: Raise nice error on `next` as second argument to deprecated-removed (GH-124623) (cherry-picked from e349f73)
1 parent f54e1a2 commit dba992b

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

Doc/tools/extensions/pyspecific.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,22 @@ def run(self):
184184
return PyMethod.run(self)
185185

186186

187-
# Support for documenting version of removal in deprecations
187+
# Support for documenting version of changes, additions, deprecations
188+
189+
def expand_version_arg(argument, release):
190+
"""Expand "next" to the current version"""
191+
if argument == 'next':
192+
return sphinx_gettext('{} (unreleased)').format(release)
193+
return argument
194+
195+
196+
class PyVersionChange(VersionChange):
197+
def run(self):
198+
# Replace the 'next' special token with the current development version
199+
self.arguments[0] = expand_version_arg(self.arguments[0],
200+
self.config.release)
201+
return super().run()
202+
188203

189204
class DeprecatedRemoved(VersionChange):
190205
required_arguments = 2
@@ -195,8 +210,12 @@ class DeprecatedRemoved(VersionChange):
195210
def run(self):
196211
# Replace the first two arguments (deprecated version and removed version)
197212
# with a single tuple of both versions.
198-
version_deprecated = self.arguments[0]
213+
version_deprecated = expand_version_arg(self.arguments[0],
214+
self.config.release)
199215
version_removed = self.arguments.pop(1)
216+
if version_removed == 'next':
217+
raise ValueError(
218+
'deprecated-removed:: second argument cannot be `next`')
200219
self.arguments[0] = version_deprecated, version_removed
201220

202221
# Set the label based on if we have reached the removal version
@@ -398,6 +417,10 @@ def setup(app):
398417
app.add_role('issue', issue_role)
399418
app.add_role('gh', gh_issue_role)
400419
app.add_directive('impl-detail', ImplementationDetail)
420+
app.add_directive('versionadded', PyVersionChange, override=True)
421+
app.add_directive('versionchanged', PyVersionChange, override=True)
422+
app.add_directive('versionremoved', PyVersionChange, override=True)
423+
app.add_directive('deprecated', PyVersionChange, override=True)
401424
app.add_directive('deprecated-removed', DeprecatedRemoved)
402425
app.add_builder(PydocTopicsBuilder)
403426
app.add_object_type('opcode', 'opcode', '%s (opcode)', parse_opcode_signature)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Writers of CPython's documentation can now use ``next`` as the version for
2+
the ``versionchanged``, ``versionadded``, ``deprecated`` directives.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy