[Python-checkins] [3.9] [codemod] Fix non-matching bracket pairs (GH-28473) (GH-28512)

ambv webhook-mailer at python.org
Wed Sep 22 11:32:14 EDT 2021


https://github.com/python/cpython/commit/5482db5800d195d43d1e13e8c05e21c708dcfa50
commit: 5482db5800d195d43d1e13e8c05e21c708dcfa50
branch: 3.9
author: Łukasz Langa <lukasz at langa.pl>
committer: ambv <lukasz at langa.pl>
date: 2021-09-22T17:32:04+02:00
summary:

[3.9] [codemod] Fix non-matching bracket pairs (GH-28473) (GH-28512)

Co-authored-by: Terry Jan Reedy <tjreedy at udel.edu>
Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>
Co-authored-by: Łukasz Langa <lukasz at langa.pl>.
(cherry picked from commit 8f943ca25732d548cf9f0b0393ba8d582fb93e29)

Co-authored-by: Mohamad Mansour <66031317+mohamadmansourX at users.noreply.github.com>

files:
M Doc/library/cgi.rst
M Doc/library/logging.config.rst
M Doc/library/urllib.request.rst
M Doc/reference/compound_stmts.rst
M Include/cpython/unicodeobject.h
M Lib/_osx_support.py
M Lib/distutils/command/check.py
M Lib/distutils/msvc9compiler.py
M Lib/graphlib.py
M Lib/idlelib/idle_test/test_config_key.py
M Lib/idlelib/idle_test/test_query.py
M Lib/msilib/schema.py
M Lib/pkgutil.py
M Lib/pydoc_data/topics.py
M Lib/test/support/__init__.py
M Lib/test/test_format.py
M Lib/test/test_importlib/source/test_source_encoding.py
M Lib/test/test_winreg.py
M Misc/NEWS.d/3.8.0b1.rst
M Modules/_datetimemodule.c
M Modules/_math.c
M Modules/arraymodule.c
M Modules/clinic/arraymodule.c.h
M Modules/zlibmodule.c
M Objects/unicodeobject.c
M PC/getpathp.c
M Tools/stringbench/stringbench.py

diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst
index 0c985c07040c5..3ec919e9ccd00 100644
--- a/Doc/library/cgi.rst
+++ b/Doc/library/cgi.rst
@@ -89,7 +89,7 @@ To get at submitted form data, use the :class:`FieldStorage` class. If the form
 contains non-ASCII characters, use the *encoding* keyword parameter set to the
 value of the encoding defined for the document. It is usually contained in the
 META tag in the HEAD section of the HTML document or by the
-:mailheader:`Content-Type` header).  This reads the form contents from the
+:mailheader:`Content-Type` header.  This reads the form contents from the
 standard input or the environment (depending on the value of various
 environment variables set according to the CGI standard).  Since it may consume
 standard input, it should be instantiated only once.
diff --git a/Doc/library/logging.config.rst b/Doc/library/logging.config.rst
index ab44850549c0c..d4dc585351bab 100644
--- a/Doc/library/logging.config.rst
+++ b/Doc/library/logging.config.rst
@@ -163,7 +163,7 @@ in :mod:`logging` itself) and defining handlers which are declared either in
       :func:`listen` socket and sending a configuration which runs whatever
       code the attacker wants to have executed in the victim's process. This is
       especially easy to do if the default port is used, but not hard even if a
-      different port is used). To avoid the risk of this happening, use the
+      different port is used. To avoid the risk of this happening, use the
       ``verify`` argument to :func:`listen` to prevent unrecognised
       configurations from being applied.
 
diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst
index 785ecf8fafdcc..d3d1517f831db 100644
--- a/Doc/library/urllib.request.rst
+++ b/Doc/library/urllib.request.rst
@@ -650,7 +650,7 @@ OpenerDirector Objects
    optional *timeout* parameter specifies a timeout in seconds for blocking
    operations like the connection attempt (if not specified, the global default
    timeout setting will be used). The timeout feature actually works only for
-   HTTP, HTTPS and FTP connections).
+   HTTP, HTTPS and FTP connections.
 
 
 .. method:: OpenerDirector.error(proto, *args)
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index 75424162a48b0..0bc1e24437100 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -479,7 +479,6 @@ is semantically equivalent to::
       The specification, background, and examples for the Python :keyword:`with`
       statement.
 
-
 .. index::
    single: parameter; function definition
 
diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h
index 17db79cffbc54..d24a7a6a4d73a 100644
--- a/Include/cpython/unicodeobject.h
+++ b/Include/cpython/unicodeobject.h
@@ -416,7 +416,7 @@ enum PyUnicode_Kind {
 
 
 /* Fast check to determine whether an object is ready. Equivalent to
-   PyUnicode_IS_COMPACT(op) || ((PyUnicodeObject*)(op))->data.any) */
+   PyUnicode_IS_COMPACT(op) || ((PyUnicodeObject*)(op))->data.any */
 
 #define PyUnicode_IS_READY(op) (((PyASCIIObject*)op)->state.ready)
 
diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py
index 37975fe8a3eef..940c462e99952 100644
--- a/Lib/_osx_support.py
+++ b/Lib/_osx_support.py
@@ -482,7 +482,7 @@ def customize_compiler(_config_vars):
 
     This customization is performed when the first
     extension module build is requested
-    in distutils.sysconfig.customize_compiler).
+    in distutils.sysconfig.customize_compiler.
     """
 
     # Find a compiler to use for extension module builds
diff --git a/Lib/distutils/command/check.py b/Lib/distutils/command/check.py
index ada250064678e..73a30f3afd84a 100644
--- a/Lib/distutils/command/check.py
+++ b/Lib/distutils/command/check.py
@@ -83,7 +83,7 @@ def check_metadata(self):
             name, version, URL
 
         Recommended fields:
-            (author and author_email) or (maintainer and maintainer_email))
+            (author and author_email) or (maintainer and maintainer_email)
 
         Warns if any are missing.
         """
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 6934e964abd69..a7976fbe3ed92 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -673,7 +673,7 @@ def manifest_get_embed_info(self, target_desc, ld_args):
         # If a manifest should be embedded, return a tuple of
         # (manifest_filename, resource_id).  Returns None if no manifest
         # should be embedded.  See http://bugs.python.org/issue7833 for why
-        # we want to avoid any manifest for extension modules if we can)
+        # we want to avoid any manifest for extension modules if we can.
         for arg in ld_args:
             if arg.startswith("/MANIFESTFILE:"):
                 temp_manifest = arg.split(":", 1)[1]
diff --git a/Lib/graphlib.py b/Lib/graphlib.py
index d0e7a4814c565..1c5d9a413c944 100644
--- a/Lib/graphlib.py
+++ b/Lib/graphlib.py
@@ -17,7 +17,7 @@ def __init__(self, node):
         self.npredecessors = 0
 
         # List of successor nodes. The list can contain duplicated elements as
-        # long as they're all reflected in the successor's npredecessors attribute).
+        # long as they're all reflected in the successor's npredecessors attribute.
         self.successors = []
 
 
diff --git a/Lib/idlelib/idle_test/test_config_key.py b/Lib/idlelib/idle_test/test_config_key.py
index b7fe7fd6b5ec1..bf66cadf57cd3 100644
--- a/Lib/idlelib/idle_test/test_config_key.py
+++ b/Lib/idlelib/idle_test/test_config_key.py
@@ -2,7 +2,7 @@
 
 Coverage is effectively 100%.  Tkinter dialog is mocked, Mac-only line
 may be skipped, and dummy function in bind test should not be called.
-Not tested: exit with 'self.advanced or self.keys_ok(keys)) ...' False.
+Not tested: exit with 'self.advanced or self.keys_ok(keys) ...' False.
 """
 
 from idlelib import config_key
diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py
index 41905111b7a73..bb12b2b08652d 100644
--- a/Lib/idlelib/idle_test/test_query.py
+++ b/Lib/idlelib/idle_test/test_query.py
@@ -1,4 +1,4 @@
-"""Test query, coverage 93%).
+"""Test query, coverage 93%.
 
 Non-gui tests for Query, SectionName, ModuleName, and HelpSource use
 dummy versions that extract the non-gui methods and add other needed
diff --git a/Lib/msilib/schema.py b/Lib/msilib/schema.py
index eeb3ecd27ab65..9f5745cfb14de 100644
--- a/Lib/msilib/schema.py
+++ b/Lib/msilib/schema.py
@@ -664,7 +664,7 @@
 ('Class','Component_','N',None, None, 'Component',1,'Identifier',None, 'Required foreign key into the Component Table, specifying the component for which to return a path when called through LocateComponent.',),
 ('Class','Context','N',None, None, None, None, 'Identifier',None, 'The numeric server context for this server. CLSCTX_xxxx',),
 ('Class','DefInprocHandler','Y',None, None, None, None, 'Filename','1;2;3','Optional default inproc handler.  Only optionally provided if Context=CLSCTX_LOCAL_SERVER.  Typically "ole32.dll" or "mapi32.dll"',),
-('Class','FileTypeMask','Y',None, None, None, None, 'Text',None, 'Optional string containing information for the HKCRthis CLSID) key. If multiple patterns exist, they must be delimited by a semicolon, and numeric subkeys will be generated: 0,1,2...',),
+('Class','FileTypeMask','Y',None, None, None, None, 'Text',None, 'Optional string containing information for the HKCRthis CLSID key. If multiple patterns exist, they must be delimited by a semicolon, and numeric subkeys will be generated: 0,1,2...',),
 ('Class','Icon_','Y',None, None, 'Icon',1,'Identifier',None, 'Optional foreign key into the Icon Table, specifying the icon file associated with this CLSID. Will be written under the DefaultIcon key.',),
 ('Class','IconIndex','Y',-32767,32767,None, None, None, None, 'Optional icon index.',),
 ('Class','ProgId_Default','Y',None, None, 'ProgId',1,'Text',None, 'Optional ProgId associated with this CLSID.',),
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
index 1d623e621f09c..9608d0e0ede55 100644
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -673,7 +673,7 @@ def resolve_name(name):
     ValueError - if `name` isn't in a recognised format
     ImportError - if an import failed when it shouldn't have
     AttributeError - if a failure occurred when traversing the object hierarchy
-                     within the imported package to get to the desired object)
+                     within the imported package to get to the desired object.
     """
     m = _NAME_PATTERN.match(name)
     if not m:
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index bc69434998ad4..1ad62250a52fb 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Mon Aug 30 20:40:44 2021
+# Autogenerated by Sphinx on Wed Sep 22 01:22:10 2021
 topics = {'assert': 'The "assert" statement\n'
            '**********************\n'
            '\n'
@@ -3262,13 +3262,13 @@
                   '\n'
                   '   If "__new__()" is invoked during object construction and '
                   'it returns\n'
-                  '   an instance or subclass of *cls*, then the new '
-                  'instance’s\n'
-                  '   "__init__()" method will be invoked like '
-                  '"__init__(self[, ...])",\n'
-                  '   where *self* is the new instance and the remaining '
-                  'arguments are\n'
-                  '   the same as were passed to the object constructor.\n'
+                  '   an instance of *cls*, then the new instance’s '
+                  '"__init__()" method\n'
+                  '   will be invoked like "__init__(self[, ...])", where '
+                  '*self* is the\n'
+                  '   new instance and the remaining arguments are the same as '
+                  'were\n'
+                  '   passed to the object constructor.\n'
                   '\n'
                   '   If "__new__()" does not return an instance of *cls*, '
                   'then the new\n'
@@ -8120,13 +8120,13 @@
                  '\n'
                  '   If "__new__()" is invoked during object construction and '
                  'it returns\n'
-                 '   an instance or subclass of *cls*, then the new '
-                 'instance’s\n'
-                 '   "__init__()" method will be invoked like "__init__(self[, '
-                 '...])",\n'
-                 '   where *self* is the new instance and the remaining '
-                 'arguments are\n'
-                 '   the same as were passed to the object constructor.\n'
+                 '   an instance of *cls*, then the new instance’s '
+                 '"__init__()" method\n'
+                 '   will be invoked like "__init__(self[, ...])", where '
+                 '*self* is the\n'
+                 '   new instance and the remaining arguments are the same as '
+                 'were\n'
+                 '   passed to the object constructor.\n'
                  '\n'
                  '   If "__new__()" does not return an instance of *cls*, then '
                  'the new\n'
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 51af6f37d9bce..ead91b09a950b 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -682,8 +682,8 @@ def dec(*args, **kwargs):
 # A constant likely larger than the underlying OS socket buffer size, to make
 # writes blocking.
 # The socket buffer sizes can usually be tuned system-wide (e.g. through sysctl
-# on Linux), or on a per-socket basis (SO_SNDBUF/SO_RCVBUF). See issue #18643
-# for a discussion of this number).
+# on Linux), or on a per-socket basis (SO_SNDBUF/SO_RCVBUF).  See issue #18643
+# for a discussion of this number.
 SOCK_MAX_SIZE = 16 * 1024 * 1024 + 1
 
 # decorator for skipping tests on non-IEEE 754 platforms
diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py
index 9653e46ecc52d..55e175afedfe8 100644
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -249,7 +249,7 @@ def test_common_format(self):
         # base marker shouldn't change the size
         testcommon("%0#35.33o", big, "0o012345670123456701234567012345670")
 
-        # Some small ints, in both Python int and flavors).
+        # Some small ints, in both Python int and flavors.
         testcommon("%d", 42, "42")
         testcommon("%d", -42, "-42")
         testcommon("%d", 42.0, "42")
diff --git a/Lib/test/test_importlib/source/test_source_encoding.py b/Lib/test/test_importlib/source/test_source_encoding.py
index 980855fe1ade1..c0b9b031262eb 100644
--- a/Lib/test/test_importlib/source/test_source_encoding.py
+++ b/Lib/test/test_importlib/source/test_source_encoding.py
@@ -23,7 +23,7 @@ class EncodingTest:
 
     PEP 263 specifies how that can change on a per-file basis. Either the first
     or second line can contain the encoding line [encoding first line]
-    encoding second line]. If the file has the BOM marker it is considered UTF-8
+    [encoding second line]. If the file has the BOM marker it is considered UTF-8
     implicitly [BOM]. If any encoding is specified it must be UTF-8, else it is
     an error [BOM and utf-8][BOM conflict].
 
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index 1e689f74851b9..ca0a28df81191 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -45,7 +45,7 @@
     ("Raw Data",      b"binary\x00data",                       REG_BINARY),
     ("Big String",    "x"*(2**14-1),                           REG_SZ),
     ("Big Binary",    b"x"*(2**14),                            REG_BINARY),
-    # Two and three kanjis, meaning: "Japan" and "Japanese")
+    # Two and three kanjis, meaning: "Japan" and "Japanese".
     ("Japanese 日本", "日本語", REG_SZ),
 ]
 
diff --git a/Misc/NEWS.d/3.8.0b1.rst b/Misc/NEWS.d/3.8.0b1.rst
index 5400c07795292..5285770de1318 100644
--- a/Misc/NEWS.d/3.8.0b1.rst
+++ b/Misc/NEWS.d/3.8.0b1.rst
@@ -568,7 +568,7 @@ Make :func:`asyncio.create_subprocess_exec` accept path-like arguments.
 .. section: Library
 
 Change default *max_workers* of ``ThreadPoolExecutor`` from ``cpu_count() *
-5`` to ``min(32, cpu_count() + 4))``.  Previous value was unreasonably large
+5`` to ``min(32, cpu_count() + 4)``.  Previous value was unreasonably large
 on many cores machines.
 
 ..
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index 4e0c3783d91eb..960237540564b 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -1022,7 +1022,7 @@ new_time_ex(int hour, int minute, int second, int usecond,
  * true.  Passing false is a speed optimization, if you know for sure
  * that seconds and microseconds are already in their proper ranges.  In any
  * case, raises OverflowError and returns NULL if the normalized days is out
- * of range).
+ * of range.
  */
 static PyObject *
 new_delta_ex(int days, int seconds, int microseconds, int normalize,
diff --git a/Modules/_math.c b/Modules/_math.c
index 02d8f1c43c800..68e3a2346925d 100644
--- a/Modules/_math.c
+++ b/Modules/_math.c
@@ -90,7 +90,7 @@ _Py_acosh(double x)
  *              asinh(x) = sign(x) * log [ |x| + sqrt(x*x+1) ]
  *      we have
  *      asinh(x) := x  if  1+x*x=1,
- *               := sign(x)*(log(x)+ln2)) for large |x|, else
+ *               := sign(x)*(log(x)+ln2) for large |x|, else
  *               := sign(x)*log(2|x|+1/(|x|+sqrt(x*x+1))) if|x|>2, else
  *               := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2)))
  */
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 724c503eba289..7c7fc917454b0 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1636,12 +1636,12 @@ array.array.frombytes
     buffer: Py_buffer
     /
 
-Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method).
+Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method.
 [clinic start generated code]*/
 
 static PyObject *
 array_array_frombytes_impl(arrayobject *self, Py_buffer *buffer)
-/*[clinic end generated code: output=d9842c8f7510a516 input=2bbf2b53ebfcc988]*/
+/*[clinic end generated code: output=d9842c8f7510a516 input=378db226dfac949e]*/
 {
     return frombytes(self, buffer);
 }
diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h
index b9245ca91d5fa..005c7ffce4d25 100644
--- a/Modules/clinic/arraymodule.c.h
+++ b/Modules/clinic/arraymodule.c.h
@@ -316,7 +316,7 @@ PyDoc_STRVAR(array_array_frombytes__doc__,
 "frombytes($self, buffer, /)\n"
 "--\n"
 "\n"
-"Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method).");
+"Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method.");
 
 #define ARRAY_ARRAY_FROMBYTES_METHODDEF    \
     {"frombytes", (PyCFunction)array_array_frombytes, METH_O, array_array_frombytes__doc__},
@@ -534,4 +534,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__,
 
 #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF    \
     {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__},
-/*[clinic end generated code: output=9f70748dd3bc532f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=485e848d1f3d05e7 input=a9049054013a1b77]*/
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index 6c14c3adbf268..8f8bcd85f2c16 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -1361,7 +1361,7 @@ PyDoc_STRVAR(zlib_module_documentation,
 "compressobj([level[, ...]]) -- Return a compressor object.\n"
 "crc32(string[, start]) -- Compute a CRC-32 checksum.\n"
 "decompress(string,[wbits],[bufsize]) -- Decompresses a compressed string.\n"
-"decompressobj([wbits[, zdict]]]) -- Return a decompressor object.\n"
+"decompressobj([wbits[, zdict]]) -- Return a decompressor object.\n"
 "\n"
 "'wbits' is window buffer size and container format.\n"
 "Compressor objects support compress() and flush() methods; decompressor\n"
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 46a0956c8bb70..4fb06f9fd26e0 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -10867,7 +10867,7 @@ replace(PyObject *self, PyObject *str1,
             release1 = 1;
         }
         /* new_size = PyUnicode_GET_LENGTH(self) + n * (PyUnicode_GET_LENGTH(str2) -
-           PyUnicode_GET_LENGTH(str1))); */
+           PyUnicode_GET_LENGTH(str1)); */
         if (len1 < len2 && len2 - len1 > (PY_SSIZE_T_MAX - slen) / n) {
                 PyErr_SetString(PyExc_OverflowError,
                                 "replace string is too long");
diff --git a/PC/getpathp.c b/PC/getpathp.c
index 53da3a6d05fae..603a1eb13c4ff 100644
--- a/PC/getpathp.c
+++ b/PC/getpathp.c
@@ -29,7 +29,7 @@
      - If we DO have a Python Home: The relevant sub-directories (Lib,
        DLLs, etc) are based on the Python Home
      - If we DO NOT have a Python Home, the core Python Path is
-       loaded from the registry.  This is the main PythonPath key,
+       loaded from the registry.  (This is the main PythonPath key,
        and both HKLM and HKCU are combined to form the path)
 
    * Iff - we can not locate the Python Home, have not had a PYTHONPATH
diff --git a/Tools/stringbench/stringbench.py b/Tools/stringbench/stringbench.py
index 5abc25a5723f2..5d2b414637862 100644
--- a/Tools/stringbench/stringbench.py
+++ b/Tools/stringbench/stringbench.py
@@ -730,7 +730,7 @@ def join_alphabet_list_five(STR):
     for x in _RANGE_1000:
         sep_join(s2)
 
- at bench('"A".join(["Bob"]*100))',
+ at bench('"A".join(["Bob"]*100)',
        "join list of 100 words, with 1 character sep", 1000)
 def join_100_words_single(STR):
     sep = STR("A")



More information about the Python-checkins mailing list