Skip to content

Commit f456e6f

Browse files
committed
[3.11] pythongh-121277: Allow .. versionadded:: next in docs (pythonGH-121278) (python#124718)
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 <[email protected]> Co-authored-by: Hugo van Kemenade <[email protected]> (cherry picked from commit 7d24ea9) pythongh-121277: Raise nice error on `next` as second argument to deprecated-removed (pythonGH-124623) (cherry-picked from e349f73)
1 parent 976c4f2 commit f456e6f

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

Doc/tools/extensions/pyspecific.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,22 @@ def run(self):
414414
return PyMethod.run(self)
415415

416416

417-
# Support for documenting version of removal in deprecations
417+
# Support for documenting version of changes, additions, deprecations
418+
419+
def expand_version_arg(argument, release):
420+
"""Expand "next" to the current version"""
421+
if argument == 'next':
422+
return sphinx_gettext('{} (unreleased)').format(release)
423+
return argument
424+
425+
426+
class PyVersionChange(VersionChange):
427+
def run(self):
428+
# Replace the 'next' special token with the current development version
429+
self.arguments[0] = expand_version_arg(self.arguments[0],
430+
self.config.release)
431+
return super().run()
432+
418433

419434
class DeprecatedRemoved(Directive):
420435
has_content = True
@@ -430,7 +445,13 @@ def run(self):
430445
node = addnodes.versionmodified()
431446
node.document = self.state.document
432447
node['type'] = 'deprecated-removed'
433-
version = (self.arguments[0], self.arguments[1])
448+
version = (
449+
expand_version_arg(self.arguments[0], self.config.release),
450+
self.arguments[1],
451+
)
452+
if version[1] == 'next':
453+
raise ValueError(
454+
'deprecated-removed:: second argument cannot be `next`')
434455
node['version'] = version
435456
env = self.state.document.settings.env
436457
current_version = tuple(int(e) for e in env.config.version.split('.'))
@@ -713,6 +734,10 @@ def setup(app):
713734
app.add_directive('availability', Availability)
714735
app.add_directive('audit-event', AuditEvent)
715736
app.add_directive('audit-event-table', AuditEventListDirective)
737+
app.add_directive('versionadded', PyVersionChange, override=True)
738+
app.add_directive('versionchanged', PyVersionChange, override=True)
739+
app.add_directive('versionremoved', PyVersionChange, override=True)
740+
app.add_directive('deprecated', PyVersionChange, override=True)
716741
app.add_directive('deprecated-removed', DeprecatedRemoved)
717742
app.add_builder(PydocTopicsBuilder)
718743
app.add_builder(suspicious.CheckSuspiciousMarkupBuilder)
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)