bpo-35766: Change format for feature_version to (major, minor) (GH-13992)
authorGuido van Rossum <guido@python.org>
Wed, 12 Jun 2019 00:23:12 +0000 (17:23 -0700)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 12 Jun 2019 00:23:12 +0000 (17:23 -0700)
(A single int is still allowed, but undocumented.)

https://bugs.python.org/issue35766

Doc/library/ast.rst
Doc/whatsnew/3.8.rst
Lib/ast.py
Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst [new file with mode: 0644]

index 1884bea80e80472a0c7b8ca1d128de07a125ce8b..1e718382589c48acd10ea8e48366ee66e86228ec 100644 (file)
@@ -126,7 +126,7 @@ The abstract grammar is currently defined as follows:
 Apart from the node classes, the :mod:`ast` module defines these utility functions
 and classes for traversing abstract syntax trees:
 
-.. function:: parse(source, filename='<unknown>', mode='exec', *, type_comments=False, feature_version=-1)
+.. function:: parse(source, filename='<unknown>', mode='exec', *, type_comments=False, feature_version=None)
 
    Parse the source into an AST node.  Equivalent to ``compile(source,
    filename, mode, ast.PyCF_ONLY_AST)``.
@@ -145,11 +145,12 @@ and classes for traversing abstract syntax trees:
    modified to correspond to :pep:`484` "signature type comments",
    e.g. ``(str, int) -> List[str]``.
 
-   Also, setting ``feature_version`` to the minor version of an
-   earlier Python 3 version will attempt to parse using that version's
-   grammar.  For example, setting ``feature_version=4`` will allow
-   the use of ``async`` and ``await`` as variable names.  The lowest
-   supported value is 4; the highest is ``sys.version_info[1]``.
+   Also, setting ``feature_version`` to a tuple ``(major, minor)``
+   will attempt to parse using that Python version's grammar.
+   Currently ``major`` must equal to ``3``.  For example, setting
+   ``feature_version=(3, 4)`` will allow the use of ``async`` and
+   ``await`` as variable names.  The lowest supported version is
+   ``(3, 4)``; the highest is ``sys.version_info[0:2]``.
 
    .. warning::
       It is possible to crash the Python interpreter with a
index eb276139192df98d964dd547f75bf4d7fcde2a02..264586434b9b0866c54b24f1e66c28767329c23b 100644 (file)
@@ -378,9 +378,9 @@ The :func:`ast.parse` function has some new flags:
 * ``mode='func_type'`` can be used to parse :pep:`484` "signature type
   comments" (returned for function definition AST nodes);
 
-* ``feature_version=N`` allows specifying the minor version of an
-  earlier Python 3 version.  (For example, ``feature_version=4`` will
-  treat ``async`` and ``await`` as non-reserved words.)
+* ``feature_version=(3, N)`` allows specifying an earlier Python 3
+  version.  (For example, ``feature_version=(3, 4)`` will treat
+  ``async`` and ``await`` as non-reserved words.)
 
 New function :func:`ast.get_source_segment` returns the source code
 for a specific AST node.
index 64e7a2551fb1aa6d12adebf3e062851d4a60d702..70fbbdd2ffbd8a230b07b3534940cd77d58e0ff2 100644 (file)
@@ -28,7 +28,7 @@ from _ast import *
 
 
 def parse(source, filename='<unknown>', mode='exec', *,
-          type_comments=False, feature_version=-1):
+          type_comments=False, feature_version=None):
     """
     Parse the source into an AST node.
     Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
@@ -37,6 +37,13 @@ def parse(source, filename='<unknown>', mode='exec', *,
     flags = PyCF_ONLY_AST
     if type_comments:
         flags |= PyCF_TYPE_COMMENTS
+    if isinstance(feature_version, tuple):
+        major, minor = feature_version  # Should be a 2-tuple.
+        assert major == 3
+        feature_version = minor
+    elif feature_version is None:
+        feature_version = -1
+    # Else it should be an int giving the minor version for 3.x.
     return compile(source, filename, mode, flags,
                    feature_version=feature_version)
 
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst b/Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst
new file mode 100644 (file)
index 0000000..6dd4999
--- /dev/null
@@ -0,0 +1 @@
+Change the format of feature_version to be a (major, minor) tuple.