Skip to content

Commit 8773554

Browse files
authored
[3.10] gh-121277: Allow .. versionadded:: next in docs (GH-121278) (#127867)
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) Updates for 3.10 (cherry-picked from 3.11: f0895aa) * Use version, not arguments directly
1 parent 362fc98 commit 8773554

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

Doc/tools/extensions/pyspecific.py

Lines changed: 31 additions & 6 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:
@@ -356,7 +357,22 @@ def run(self):
356357
return PyMethod.run(self)
357358

358359

359-
# Support for documenting version of removal in deprecations
360+
# Support for documenting version of changes, additions, deprecations
361+
362+
def expand_version_arg(argument, release):
363+
"""Expand "next" to the current version"""
364+
if argument == 'next':
365+
return sphinx_gettext('{} (unreleased)').format(release)
366+
return argument
367+
368+
369+
class PyVersionChange(VersionChange):
370+
def run(self):
371+
# Replace the 'next' special token with the current development version
372+
self.arguments[0] = expand_version_arg(self.arguments[0],
373+
self.config.release)
374+
return super().run()
375+
360376

361377
class DeprecatedRemoved(Directive):
362378
has_content = True
@@ -372,18 +388,23 @@ def run(self):
372388
node = addnodes.versionmodified()
373389
node.document = self.state.document
374390
node['type'] = 'deprecated-removed'
375-
version = (self.arguments[0], self.arguments[1])
376-
node['version'] = version
377391
env = self.state.document.settings.env
392+
version = (
393+
expand_version_arg(self.arguments[0], env.config.release),
394+
self.arguments[1],
395+
)
396+
if version[1] == 'next':
397+
raise ValueError(
398+
'deprecated-removed:: second argument cannot be `next`')
399+
node['version'] = version
378400
current_version = tuple(int(e) for e in env.config.version.split('.'))
379-
removed_version = tuple(int(e) for e in self.arguments[1].split('.'))
401+
removed_version = tuple(int(e) for e in version[1].split('.'))
380402
if current_version < removed_version:
381403
label = self._deprecated_label
382404
else:
383405
label = self._removed_label
384406

385-
label = sphinx_gettext(label)
386-
text = label.format(deprecated=self.arguments[0], removed=self.arguments[1])
407+
text = label.format(deprecated=version[0], removed=version[1])
387408
if len(self.arguments) == 3:
388409
inodes, messages = self.state.inline_text(self.arguments[2],
389410
self.lineno+1)
@@ -631,6 +652,10 @@ def setup(app):
631652
app.add_directive('availability', Availability)
632653
app.add_directive('audit-event', AuditEvent)
633654
app.add_directive('audit-event-table', AuditEventListDirective)
655+
app.add_directive('versionadded', PyVersionChange, override=True)
656+
app.add_directive('versionchanged', PyVersionChange, override=True)
657+
app.add_directive('versionremoved', PyVersionChange, override=True)
658+
app.add_directive('deprecated', PyVersionChange, override=True)
634659
app.add_directive('deprecated-removed', DeprecatedRemoved)
635660
app.add_builder(PydocTopicsBuilder)
636661
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