]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-121277: Allow `.. versionadded:: next` in docs (GH-121278)
authorPetr Viktorin <encukou@gmail.com>
Wed, 25 Sep 2024 21:30:40 +0000 (23:30 +0200)
committerGitHub <noreply@github.com>
Wed, 25 Sep 2024 21:30:40 +0000 (23:30 +0200)
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>
Doc/c-api/long.rst
Doc/c-api/unicode.rst
Doc/library/ast.rst
Doc/library/ctypes.rst
Doc/library/dis.rst
Doc/library/pathlib.rst
Doc/library/symtable.rst
Doc/tools/extensions/pyspecific.py
Misc/NEWS.d/next/Documentation/2024-07-19-12-22-48.gh-issue-121277.wF_zKd.rst [new file with mode: 0644]

index 098a55c50e219ae1ae7c06f19c68d425eda471bb..188eec4592a2702707ba962570156ce0485ec14c 100644 (file)
@@ -570,7 +570,7 @@ distinguished from a number.  Use :c:func:`PyErr_Occurred` to disambiguate.
    On failure, return -1 with an exception set.  This function always succeeds
    if *obj* is a :c:type:`PyLongObject` or its subtype.
 
-   .. versionadded:: 3.14
+   .. versionadded:: next
 
 
 .. c:function:: PyObject* PyLong_GetInfo(void)
index 958fafd47ac81b58bec57e7217627b5d76d1d0fd..30e26fe52178d7be1b88e960f910f4a826ce8d9f 100644 (file)
@@ -1534,7 +1534,7 @@ PyUnicodeWriter
 The :c:type:`PyUnicodeWriter` API can be used to create a Python :class:`str`
 object.
 
-.. versionadded:: 3.14
+.. versionadded:: next
 
 .. c:type:: PyUnicodeWriter
 
index 55007624c876fac0713989112f481f8bed0877cc..a8a18ad31fb773aa9493a175d5ed0b0cddaf1c77 100644 (file)
@@ -2491,7 +2491,7 @@ effects on the compilation of a program:
    differ in whitespace or similar details. Attributes include line numbers
    and column offsets.
 
-   .. versionadded:: 3.14
+   .. versionadded:: next
 
 
 .. _ast-cli:
index a218304653aee9a0109e088f01e40e6058a1ec23..535c5173be50de2a4a385a2061ccac87de4f8525 100644 (file)
@@ -2303,7 +2303,7 @@ These are the fundamental ctypes data types:
    Represents the C :c:expr:`double complex` datatype, if available.  The
    constructor accepts an optional :class:`complex` initializer.
 
-   .. versionadded:: 3.14
+   .. versionadded:: next
 
 
 .. class:: c_float_complex
index 662c890d996a24b93ceed04332724e3c9f20a1bc..e3919c2ffad84cf3a80b790673f183a85823cd09 100644 (file)
@@ -959,7 +959,7 @@ iterations of the loop.
    list of constants supported by this instruction.  Used by the :keyword:`assert`
    statement to load :exc:`AssertionError`.
 
-   .. versionadded:: 3.14
+   .. versionadded:: next
 
 
 .. opcode:: LOAD_BUILD_CLASS
@@ -1826,7 +1826,7 @@ iterations of the loop.
    If ``type(STACK[-1]).__xxx__`` is not a method, leave
    ``STACK[-1].__xxx__; NULL`` on the stack.
 
-   .. versionadded:: 3.14
+   .. versionadded:: next
 
 
 **Pseudo-instructions**
index 4380122eb1be7d06b65ab5bf439adbf82edad15d..30d0d385d0539c977104d2614015f007792e1e25 100644 (file)
@@ -1563,7 +1563,7 @@ Copying, moving and deleting
    This argument has no effect when copying files on Windows (where
    metadata is always preserved).
 
-   .. versionadded:: 3.14
+   .. versionadded:: next
 
 
 .. method:: Path.copy_into(target_dir, *, follow_symlinks=True, \
@@ -1574,7 +1574,7 @@ Copying, moving and deleting
    :meth:`Path.copy`. Returns a new :class:`!Path` instance pointing to the
    copy.
 
-   .. versionadded:: 3.14
+   .. versionadded:: next
 
 
 .. method:: Path.rename(target)
index 8ebcb3bcf1b7b4894c21b8757fd9d5d2b693b440..15e0b23aa12bf0c47d861c9c516e2a2ebb000328 100644 (file)
@@ -255,7 +255,7 @@ Examining Symbol Tables
 
       Return ``True`` if the symbol is a type parameter.
 
-      .. versionadded:: 3.14
+      .. versionadded:: next
 
    .. method:: is_global()
 
@@ -302,7 +302,7 @@ Examining Symbol Tables
       be free from the perspective of ``C.method``, thereby allowing
       the latter to return *1* at runtime and not *2*.
 
-      .. versionadded:: 3.14
+      .. versionadded:: next
 
    .. method:: is_assigned()
 
@@ -312,13 +312,13 @@ Examining Symbol Tables
 
       Return ``True`` if the symbol is a comprehension iteration variable.
 
-      .. versionadded:: 3.14
+      .. versionadded:: next
 
    .. method:: is_comp_cell()
 
       Return ``True`` if the symbol is a cell in an inlined comprehension.
 
-      .. versionadded:: 3.14
+      .. versionadded:: next
 
    .. method:: is_namespace()
 
index 791d9296a975e7761077014f4dc06e51fae1c7fe..1f725c2377035bad05c321a230684ed9c0622e2d 100644 (file)
@@ -259,7 +259,22 @@ class PyAbstractMethod(PyMethod):
         return PyMethod.run(self)
 
 
-# Support for documenting version of removal in deprecations
+# Support for documenting version of changes, additions, deprecations
+
+def expand_version_arg(argument, release):
+    """Expand "next" to the current version"""
+    if argument == 'next':
+        return sphinx_gettext('{} (unreleased)').format(release)
+    return argument
+
+
+class PyVersionChange(VersionChange):
+    def run(self):
+        # Replace the 'next' special token with the current development version
+        self.arguments[0] = expand_version_arg(self.arguments[0],
+                                               self.config.release)
+        return super().run()
+
 
 class DeprecatedRemoved(VersionChange):
     required_arguments = 2
@@ -270,7 +285,8 @@ class DeprecatedRemoved(VersionChange):
     def run(self):
         # Replace the first two arguments (deprecated version and removed version)
         # with a single tuple of both versions.
-        version_deprecated = self.arguments[0]
+        version_deprecated = expand_version_arg(self.arguments[0],
+                                                self.config.release)
         version_removed = self.arguments.pop(1)
         self.arguments[0] = version_deprecated, version_removed
 
@@ -474,6 +490,10 @@ def setup(app):
     app.add_role('gh', gh_issue_role)
     app.add_directive('impl-detail', ImplementationDetail)
     app.add_directive('availability', Availability)
+    app.add_directive('versionadded', PyVersionChange, override=True)
+    app.add_directive('versionchanged', PyVersionChange, override=True)
+    app.add_directive('versionremoved', PyVersionChange, override=True)
+    app.add_directive('deprecated', PyVersionChange, override=True)
     app.add_directive('deprecated-removed', DeprecatedRemoved)
     app.add_builder(PydocTopicsBuilder)
     app.add_object_type('opcode', 'opcode', '%s (opcode)', parse_opcode_signature)
diff --git a/Misc/NEWS.d/next/Documentation/2024-07-19-12-22-48.gh-issue-121277.wF_zKd.rst b/Misc/NEWS.d/next/Documentation/2024-07-19-12-22-48.gh-issue-121277.wF_zKd.rst
new file mode 100644 (file)
index 0000000..60f75ae
--- /dev/null
@@ -0,0 +1,2 @@
+Writers of CPython's documentation can now use ``next`` as the version for
+the ``versionchanged``, ``versionadded``, ``deprecated`` directives.