[Python-checkins] gh-102033: Fix syntax error in `Tools/c-analyzer` (GH-102066)

miss-islington webhook-mailer at python.org
Wed Mar 22 10:59:45 EDT 2023


https://github.com/python/cpython/commit/1ca315538f2f9da6c7b86c4c46e76d454c1ec4b9
commit: 1ca315538f2f9da6c7b86c4c46e76d454c1ec4b9
branch: main
author: Nikita Sobolev <mail at sobolevn.me>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2023-03-22T07:59:32-07:00
summary:

gh-102033: Fix syntax error in `Tools/c-analyzer` (GH-102066)



The easiest way to format strings with `{}` meaningful chars is via `%`.

files:
D Tools/c-analyzer/c_common/info.py
D Tools/c-analyzer/c_common/show.py
D Tools/c-analyzer/c_parser/_state_machine.py
D Tools/c-analyzer/c_parser/parser/_alt.py
D Tools/c-analyzer/c_parser/parser/_delim.py
M Tools/c-analyzer/c_analyzer/__main__.py
M Tools/c-analyzer/c_analyzer/info.py
M Tools/c-analyzer/c_common/iterutil.py
M Tools/c-analyzer/c_parser/__main__.py
M Tools/c-analyzer/c_parser/info.py
M Tools/c-analyzer/c_parser/parser/_global.py
M Tools/c-analyzer/cpython/__main__.py
M Tools/c-analyzer/cpython/_analyzer.py
M Tools/c-analyzer/cpython/_capi.py

diff --git a/Tools/c-analyzer/c_analyzer/__main__.py b/Tools/c-analyzer/c_analyzer/__main__.py
index 5d89b29adf89..cde39bc4e649 100644
--- a/Tools/c-analyzer/c_analyzer/__main__.py
+++ b/Tools/c-analyzer/c_analyzer/__main__.py
@@ -18,10 +18,8 @@
     configure_logger,
     get_prog,
     filter_filenames,
-    iter_marks,
 )
 from c_parser.info import KIND
-from c_parser.match import is_type_decl
 from .match import filter_forward
 from . import (
     analyze as _analyze,
diff --git a/Tools/c-analyzer/c_analyzer/info.py b/Tools/c-analyzer/c_analyzer/info.py
index 27c3a5a4ee76..d231e07a60dd 100644
--- a/Tools/c-analyzer/c_analyzer/info.py
+++ b/Tools/c-analyzer/c_analyzer/info.py
@@ -1,4 +1,3 @@
-from collections import namedtuple
 import os.path
 
 from c_common import fsutil
@@ -13,9 +12,6 @@
 from c_parser.match import (
     is_type_decl,
 )
-from .match import (
-    is_process_global,
-)
 
 
 IGNORED = _misc.Labeled('IGNORED')
diff --git a/Tools/c-analyzer/c_common/info.py b/Tools/c-analyzer/c_common/info.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/Tools/c-analyzer/c_common/iterutil.py b/Tools/c-analyzer/c_common/iterutil.py
index 6ded105304e4..dda3dd57c1cf 100644
--- a/Tools/c-analyzer/c_common/iterutil.py
+++ b/Tools/c-analyzer/c_common/iterutil.py
@@ -1,7 +1,3 @@
-
-_NOT_SET = object()
-
-
 def peek_and_iter(items):
     if not items:
         return None, None
diff --git a/Tools/c-analyzer/c_common/show.py b/Tools/c-analyzer/c_common/show.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/Tools/c-analyzer/c_parser/__main__.py b/Tools/c-analyzer/c_parser/__main__.py
index 78f47a1808f5..2454fcba8142 100644
--- a/Tools/c-analyzer/c_parser/__main__.py
+++ b/Tools/c-analyzer/c_parser/__main__.py
@@ -1,10 +1,7 @@
 import logging
-import os.path
 import sys
 
-from c_common import fsutil
 from c_common.scriptutil import (
-    CLIArgSpec as Arg,
     add_verbosity_cli,
     add_traceback_cli,
     add_kind_filtering_cli,
@@ -15,7 +12,6 @@
     get_prog,
     main_for_filenames,
 )
-from .preprocessor import get_preprocessor
 from .preprocessor.__main__ import (
     add_common_cli as add_preprocessor_cli,
 )
diff --git a/Tools/c-analyzer/c_parser/_state_machine.py b/Tools/c-analyzer/c_parser/_state_machine.py
deleted file mode 100644
index 875323188aad..000000000000
--- a/Tools/c-analyzer/c_parser/_state_machine.py
+++ /dev/null
@@ -1,244 +0,0 @@
-
-f'''
-    struct {ANON_IDENTIFIER};
-    struct {{ ... }}
-    struct {IDENTIFIER} {{ ... }}
-
-    union {ANON_IDENTIFIER};
-    union {{ ... }}
-    union {IDENTIFIER} {{ ... }}
-
-    enum {ANON_IDENTIFIER};
-    enum {{ ... }}
-    enum {IDENTIFIER} {{ ... }}
-
-    typedef {VARTYPE} {IDENTIFIER};
-    typedef {IDENTIFIER};
-    typedef {IDENTIFIER};
-    typedef {IDENTIFIER};
-'''
-
-
-def parse(srclines):
-    if isinstance(srclines, str):  # a filename
-        raise NotImplementedError
-
-
-
-# This only handles at most 10 nested levels.
-#MATCHED_PARENS = textwrap.dedent(rf'''
-#    # matched parens
-#    (?:
-#        [(]  # level 0
-#        (?:
-#            [^()]*
-#            [(]  # level 1
-#            (?:
-#                [^()]*
-#                [(]  # level 2
-#                (?:
-#                    [^()]*
-#                    [(]  # level 3
-#                    (?:
-#                        [^()]*
-#                        [(]  # level 4
-#                        (?:
-#                            [^()]*
-#                            [(]  # level 5
-#                            (?:
-#                                [^()]*
-#                                [(]  # level 6
-#                                (?:
-#                                    [^()]*
-#                                    [(]  # level 7
-#                                    (?:
-#                                        [^()]*
-#                                        [(]  # level 8
-#                                        (?:
-#                                            [^()]*
-#                                            [(]  # level 9
-#                                            (?:
-#                                                [^()]*
-#                                                [(]  # level 10
-#                                                [^()]*
-#                                                [)]
-#                                             )*
-#                                            [^()]*
-#                                            [)]
-#                                         )*
-#                                        [^()]*
-#                                        [)]
-#                                     )*
-#                                    [^()]*
-#                                    [)]
-#                                 )*
-#                                [^()]*
-#                                [)]
-#                             )*
-#                            [^()]*
-#                            [)]
-#                         )*
-#                        [^()]*
-#                        [)]
-#                     )*
-#                    [^()]*
-#                    [)]
-#                 )*
-#                [^()]*
-#                [)]
-#             )*
-#            [^()]*
-#            [)]
-#         )*
-#        [^()]*
-#        [)]
-#     )
-#    # end matched parens
-#    ''')
-
-r'''
-        # for loop
-        (?:
-            \s* \b for
-            \s* [(]
-            (
-                [^;]* ;
-                [^;]* ;
-                .*?
-             )  # <header>
-            [)]
-            \s*
-            (?:
-                (?:
-                    (
-                        {_ind(SIMPLE_STMT, 6)}
-                     )  # <stmt>
-                    ;
-                 )
-                |
-                ( {{ )  # <open>
-             )
-         )
-        |
-
-
-
-            (
-                (?:
-                    (?:
-                        (?:
-                            {_ind(SIMPLE_STMT, 6)}
-                         )?
-                        return \b \s*
-                        {_ind(INITIALIZER, 5)}
-                     )
-                    |
-                    (?:
-                        (?:
-                            {IDENTIFIER} \s*
-                            (?: . | -> ) \s*
-                         )*
-                        {IDENTIFIER}
-                        \s* = \s*
-                        {_ind(INITIALIZER, 5)}
-                     )
-                    |
-                    (?:
-                        {_ind(SIMPLE_STMT, 5)}
-                     )
-                 )
-                |
-                # cast compound literal
-                (?:
-                    (?:
-                        [^'"{{}};]*
-                        {_ind(STRING_LITERAL, 5)}
-                     )*
-                    [^'"{{}};]*?
-                    [^'"{{}};=]
-                    =
-                    \s* [(] [^)]* [)]
-                    \s* {{ [^;]* }}
-                 )
-             )  # <stmt>
-
-
-
-        # compound statement
-        (?:
-            (
-                (?:
-
-                    # "for" statements are handled separately above.
-                    (?: (?: else \s+ )? if | switch | while ) \s*
-                    {_ind(COMPOUND_HEAD, 5)}
-                 )
-                |
-                (?: else | do )
-                # We do not worry about compound statements for labels,
-                # "case", or "default".
-             )?  # <header>
-            \s*
-            ( {{ )  # <open>
-         )
-
-
-
-            (
-                (?:
-                    [^'"{{}};]*
-                    {_ind(STRING_LITERAL, 5)}
-                 )*
-                [^'"{{}};]*
-                # Presumably we will not see "== {{".
-                [^\s='"{{}};]
-             )?  # <header>
-
-
-
-            (
-                \b
-                (?:
-                    # We don't worry about labels with a compound statement.
-                    (?:
-                        switch \s* [(] [^{{]* [)]
-                     )
-                    |
-                    (?:
-                        case \b \s* [^:]+ [:]
-                     )
-                    |
-                    (?:
-                        default \s* [:]
-                     )
-                    |
-                    (?:
-                        do
-                     )
-                    |
-                    (?:
-                        while \s* [(] [^{{]* [)]
-                     )
-                    |
-                    #(?:
-                    #    for \s* [(] [^{{]* [)]
-                    # )
-                    #|
-                    (?:
-                        if \s* [(]
-                        (?: [^{{]* [^)] \s* {{ )* [^{{]*
-                        [)]
-                     )
-                    |
-                    (?:
-                        else
-                        (?:
-                            \s*
-                            if \s* [(]
-                            (?: [^{{]* [^)] \s* {{ )* [^{{]*
-                            [)]
-                         )?
-                     )
-                 )
-             )?  # <header>
-'''
diff --git a/Tools/c-analyzer/c_parser/info.py b/Tools/c-analyzer/c_parser/info.py
index 3fa9fefbd5ec..799f92378774 100644
--- a/Tools/c-analyzer/c_parser/info.py
+++ b/Tools/c-analyzer/c_parser/info.py
@@ -1,6 +1,5 @@
 from collections import namedtuple
 import enum
-import os.path
 import re
 
 from c_common import fsutil
@@ -8,7 +7,7 @@
 import c_common.misc as _misc
 import c_common.strutil as _strutil
 import c_common.tables as _tables
-from .parser._regexes import SIMPLE_TYPE, _STORAGE
+from .parser._regexes import _STORAGE
 
 
 FIXED_TYPE = _misc.Labeled('FIXED_TYPE')
diff --git a/Tools/c-analyzer/c_parser/parser/_alt.py b/Tools/c-analyzer/c_parser/parser/_alt.py
deleted file mode 100644
index 05a9101b4f52..000000000000
--- a/Tools/c-analyzer/c_parser/parser/_alt.py
+++ /dev/null
@@ -1,6 +0,0 @@
-
-def _parse(srclines, anon_name):
-    text = ' '.join(l for _, l in srclines)
-
-    from ._delim import parse
-    yield from parse(text, anon_name)
diff --git a/Tools/c-analyzer/c_parser/parser/_delim.py b/Tools/c-analyzer/c_parser/parser/_delim.py
deleted file mode 100644
index 51433a629d3a..000000000000
--- a/Tools/c-analyzer/c_parser/parser/_delim.py
+++ /dev/null
@@ -1,54 +0,0 @@
-import re
-import textwrap
-
-from ._regexes import _ind, STRING_LITERAL
-
-
-def parse(text, anon_name):
-    context = None
-    data = None
-    for m in DELIMITER_RE.find_iter(text):
-        before, opened, closed = m.groups()
-        delim = opened or closed
-
-        handle_segment = HANDLERS[context][delim]
-        result, context, data = handle_segment(before, delim, data)
-        if result:
-            yield result
-
-
-DELIMITER = textwrap.dedent(rf'''
-    (
-        (?:
-            [^'"()\[\]{};]*
-            {_ind(STRING_LITERAL, 3)}
-        }*
-        [^'"()\[\]{};]+
-     )?  # <before>
-    (?:
-        (
-            [(\[{]
-         )  # <open>
-        |
-        (
-            [)\]};]
-         )  # <close>
-     )?
-    ''')
-DELIMITER_RE = re.compile(DELIMITER, re.VERBOSE)
-
-_HANDLERS = {
-    None: {  # global
-        # opened
-        '{': ...,
-        '[': None,
-        '(': None,
-        # closed
-        '}': None,
-        ']': None,
-        ')': None,
-        ';': ...,
-    },
-    '': {
-    },
-}
diff --git a/Tools/c-analyzer/c_parser/parser/_global.py b/Tools/c-analyzer/c_parser/parser/_global.py
index 35947c129981..b1ac9f5db034 100644
--- a/Tools/c-analyzer/c_parser/parser/_global.py
+++ b/Tools/c-analyzer/c_parser/parser/_global.py
@@ -9,7 +9,6 @@
     set_capture_groups,
 )
 from ._compound_decl_body import DECL_BODY_PARSERS
-#from ._func_body import parse_function_body
 from ._func_body import parse_function_statics as parse_function_body
 
 
diff --git a/Tools/c-analyzer/cpython/__main__.py b/Tools/c-analyzer/cpython/__main__.py
index fe7a16726f45..ec026c6932f1 100644
--- a/Tools/c-analyzer/cpython/__main__.py
+++ b/Tools/c-analyzer/cpython/__main__.py
@@ -2,7 +2,6 @@
 import sys
 import textwrap
 
-from c_common.fsutil import expand_filenames, iter_files_by_suffix
 from c_common.scriptutil import (
     VERBOSITY,
     add_verbosity_cli,
@@ -11,7 +10,6 @@
     add_kind_filtering_cli,
     add_files_cli,
     add_progress_cli,
-    main_for_filenames,
     process_args_by_key,
     configure_logger,
     get_prog,
diff --git a/Tools/c-analyzer/cpython/_analyzer.py b/Tools/c-analyzer/cpython/_analyzer.py
index cfe5e75f2f4d..68d6b31cf2b6 100644
--- a/Tools/c-analyzer/cpython/_analyzer.py
+++ b/Tools/c-analyzer/cpython/_analyzer.py
@@ -4,16 +4,12 @@
 from c_common.clsutil import classonly
 from c_parser.info import (
     KIND,
-    DeclID,
     Declaration,
     TypeDeclaration,
-    TypeDef,
-    Struct,
     Member,
     FIXED_TYPE,
 )
 from c_parser.match import (
-    is_type_decl,
     is_pots,
     is_funcptr,
 )
diff --git a/Tools/c-analyzer/cpython/_capi.py b/Tools/c-analyzer/cpython/_capi.py
index df8159a8cc16..4552f71479bd 100644
--- a/Tools/c-analyzer/cpython/_capi.py
+++ b/Tools/c-analyzer/cpython/_capi.py
@@ -7,7 +7,7 @@
 
 from c_common.tables import build_table, resolve_columns
 from c_parser.parser._regexes import _ind
-from ._files import iter_header_files, resolve_filename
+from ._files import iter_header_files
 from . import REPO_ROOT
 
 
@@ -610,8 +610,7 @@ def _render_item_full(item, groupby, verbose):
     yield item.name
     yield f'  {"filename:":10} {item.relfile}'
     for extra in ('kind', 'level'):
-        #if groupby != extra:
-            yield f'  {extra+":":10} {getattr(item, extra)}'
+        yield f'  {extra+":":10} {getattr(item, extra)}'
     if verbose:
         print('  ---------------------------------------')
         for lno, line in enumerate(item.text, item.lno):
@@ -636,7 +635,6 @@ def render_summary(items, *,
 
     subtotals = summary['totals']['subs']
     bygroup = summary['totals']['bygroup']
-    lastempty = False
     for outer, subtotal in subtotals.items():
         if bygroup:
             subtotal = f'({subtotal})'
@@ -646,10 +644,6 @@ def render_summary(items, *,
         if outer in bygroup:
             for inner, count in bygroup[outer].items():
                 yield f'   {inner + ":":9} {count}'
-            lastempty = False
-        else:
-            lastempty = True
-
     total = f'*{summary["totals"]["all"]}*'
     label = '*total*:'
     if bygroup:



More information about the Python-checkins mailing list