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)
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