Skip to content

Commit f0895aa

Browse files
authored
[3.11] pythongh-121277: Allow .. versionadded:: next in docs (pythonGH-121278) (python#124718) (python#127827)
* [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 <9087854+AA-Turner@users.noreply.github.com> Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> (cherry picked from commit 7d24ea9) pythongh-121277: Raise nice error on `next` as second argument to deprecated-removed (pythonGH-124623) (cherry-picked from e349f73) * Import VersionChange sphinx.domains.changeset.VersionChange exists at least since Sphinx 2.1, according to: https://www.sphinx-doc.org/en/master/extdev/deprecated.html * Get config from env * Use version, not arguments directly
1 parent 976c4f2 commit f0895aa

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
from sphinx import addnodes
2323
from sphinx.builders import Builder
2424
from sphinx.domains.python import PyFunction, PyMethod
25+
from sphinx.domains.changeset import VersionChange
2526
from sphinx.errors import NoUri
2627
from sphinx.locale import _ as sphinx_gettext
2728
from sphinx.util import logging
@@ -414,7 +415,22 @@ def run(self):
414415
return PyMethod.run(self)
415416

416417

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

419435
class DeprecatedRemoved(Directive):
420436
has_content = True
@@ -430,17 +446,23 @@ def run(self):
430446
node = addnodes.versionmodified()
431447
node.document = self.state.document
432448
node['type'] = 'deprecated-removed'
433-
version = (self.arguments[0], self.arguments[1])
434-
node['version'] = version
435449
env = self.state.document.settings.env
450+
version = (
451+
expand_version_arg(self.arguments[0], env.config.release),
452+
self.arguments[1],
453+
)
454+
if version[1] == 'next':
455+
raise ValueError(
456+
'deprecated-removed:: second argument cannot be `next`')
457+
node['version'] = version
436458
current_version = tuple(int(e) for e in env.config.version.split('.'))
437-
removed_version = tuple(int(e) for e in self.arguments[1].split('.'))
459+
removed_version = tuple(int(e) for e in version[1].split('.'))
438460
if current_version < removed_version:
439461
label = self._deprecated_label
440462
else:
441463
label = self._removed_label
442464

443-
text = label.format(deprecated=self.arguments[0], removed=self.arguments[1])
465+
text = label.format(deprecated=version[0], removed=version[1])
444466
if len(self.arguments) == 3:
445467
inodes, messages = self.state.inline_text(self.arguments[2],
446468
self.lineno+1)
@@ -713,6 +735,10 @@ def setup(app):
713735
app.add_directive('availability', Availability)
714736
app.add_directive('audit-event', AuditEvent)
715737
app.add_directive('audit-event-table', AuditEventListDirective)
738+
app.add_directive('versionadded', PyVersionChange, override=True)
739+
app.add_directive('versionchanged', PyVersionChange, override=True)
740+
app.add_directive('versionremoved', PyVersionChange, override=True)
741+
app.add_directive('deprecated', PyVersionChange, override=True)
716742
app.add_directive('deprecated-removed', DeprecatedRemoved)
717743
app.add_builder(PydocTopicsBuilder)
718744
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