8000 [3.9] gh-121277: Allow .. versionadded:: next in docs (GH-121278) (#1… · python/cpython@8c8a257 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8c8a257

Browse files
authored
[3.9] gh-121277: Allow .. versionadded:: next in docs (GH-121278) (#128117)
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) (cherry-picked from 3.11: f0895aa) (cherry-picked from 3.10: 8773554)
1 parent 340a82d commit 8c8a257

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

Doc/tools/extensions/pyspecific.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
from sphinx import addnodes
2424
from sphinx.builders import Builder
25+
from sphinx.domains.changeset import VersionChange
2526
try:
2627
from sphinx.errors import NoUri
2728
except ImportError:
@@ -332,7 +333,22 @@ def run(self):
332333
return PyMethod.run(self)
333334

334335

335-
# Support for documenting version of removal in deprecations
336+
# Support for documenting version of changes, additions, deprecations
337+
338+
def expand_version_arg(argument, release):
339+
"""Expand "next" to the current version"""
340+
if argument == 'next':
341+
return translators['sphinx'].gettext('{} (unreleased)').format(release)
342+
return argument
343+
344+
345+
class PyVersionChange(VersionChange):
346+
def run(self):
347+
# Replace the 'next' special token with the current development version
348+
self.arguments[0] = expand_version_arg(self.arguments[0],
349+
self.config.release)
350+
return super().run()
351+
336352

337353
class DeprecatedRemoved(Directive):
338354
has_content = True
@@ -348,18 +364,24 @@ def run(self):
348364
node = addnodes.versionmodified()
349365
node.document = self.state.document
350366
node['type'] = 'deprecated-removed'
351-
version = (self.arguments[0], self.arguments[1])
352-
node['version'] = version
353367
env = self.state.document.settings.env
368+
version = (
369+
expand_version_arg(self.arguments[0], env.config.release),
370+
self.arguments[1],
371+
)
372+
if version[1] == 'next':
373+
raise ValueError(
374+
'deprecated-removed:: second argument cannot be `next`')
375+
node['version'] = version
354376
current_version = tuple(int(e) for e in env.config.version.split('.'))
355-
removed_version = tuple(int(e) for e in self.arguments[1].split('.'))
377+
removed_version = tuple(int(e) for e in version[1].split('.'))
356378
if current_version < removed_version:
357379
label = self._deprecated_label
358380
else:
359381
label = self._removed_label
360382

361383
label = translators['sphinx'].gettext(label)
362-
text = label.format(deprecated=self.arguments[0], removed=self.arguments[1])
384+
text = label.format(deprecated=version[0], removed=version[1])
363385
if len(self.arguments) == 3:
364386
inodes, messages = self.state.inline_text(self.arguments[2],
365387
self.lineno+1)
@@ -607,6 +629,10 @@ def setup(app):
607629
app.add_directive('availability', Availability)
608630
app.add_directive('audit-event', AuditEvent)
609631
app.add_directive('audit-event-table', AuditEventListDirective)
632+
app.add_directive('versionadded', PyVersionChange, override=True)
633+
app.add_directive('versionchanged', PyVersionChange, override=True)
634+
app.add_directive('versionremoved', PyVersionChange, override=True)
635+
app.add_directive('deprecated', PyVersionChange, override=True)
610636
app.add_directive('deprecated-removed', DeprecatedRemoved)
611637
app.add_builder(PydocTopicsBuilder)
612638
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)
0