Skip to content

Commit 1e01dcf

Browse files
[3.12] gh-121277: Allow .. versionadded:: next in docs (GH-121278) (GH-125980)
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.) (cherry picked from commit 7d24ea9) Also backports a minor fix-up: gh-121277: Raise nice error on `next` as second argument to deprecated-removed (GH-124623) (cherry-picked from commit e349f73) Co-authored-by: Petr Viktorin <encukou@gmail.com>
1 parent 05214e6 commit 1e01dcf

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

Doc/tools/extensions/pyspecific.py

+25-2
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)
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)