summaryrefslogtreecommitdiff
path: root/Tools/c-analyzer/c_common/scriptutil.py
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2020-11-20 15:39:28 -0700
committerGitHub <noreply@github.com>2020-11-20 15:39:28 -0700
commit9f02b479e6b6b48d0c2aad621978cff82e530b15 (patch)
tree0632759170527a66070fc495bb832a5e7b256eb7 /Tools/c-analyzer/c_common/scriptutil.py
parenta993e901ebe60c38d46ecb31f771d0b4a206828c (diff)
downloadcpython-git-9f02b479e6b6b48d0c2aad621978cff82e530b15.tar.gz
bpo-36876: [c-analyzer tool] Tighten up the results and output. (GH-23431)
We also update the "ignored" file with a temporary list of all known globals.
Diffstat (limited to 'Tools/c-analyzer/c_common/scriptutil.py')
-rw-r--r--Tools/c-analyzer/c_common/scriptutil.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/Tools/c-analyzer/c_common/scriptutil.py b/Tools/c-analyzer/c_common/scriptutil.py
index 222059015d..50dd754886 100644
--- a/Tools/c-analyzer/c_common/scriptutil.py
+++ b/Tools/c-analyzer/c_common/scriptutil.py
@@ -307,7 +307,9 @@ def add_file_filtering_cli(parser, *, excluded=None):
exclude=tuple(_parse_files(_exclude)),
# We use the default for "show_header"
)
- ns[key] = (lambda files: fsutil.iter_filenames(files, **kwargs))
+ def process_filenames(filenames, relroot=None):
+ return fsutil.process_filenames(filenames, relroot=relroot, **kwargs)
+ ns[key] = process_filenames
return process_args
@@ -529,42 +531,46 @@ def set_command(name, add_cli):
##################################
# main() helpers
-def filter_filenames(filenames, iter_filenames=None):
- for filename, check, _ in _iter_filenames(filenames, iter_filenames):
+def filter_filenames(filenames, process_filenames=None, relroot=fsutil.USE_CWD):
+ # We expect each filename to be a normalized, absolute path.
+ for filename, _, check, _ in _iter_filenames(filenames, process_filenames, relroot):
if (reason := check()):
logger.debug(f'{filename}: {reason}')
continue
yield filename
-def main_for_filenames(filenames, iter_filenames=None):
- for filename, check, show in _iter_filenames(filenames, iter_filenames):
+def main_for_filenames(filenames, process_filenames=None, relroot=fsutil.USE_CWD):
+ filenames, relroot = fsutil.fix_filenames(filenames, relroot=relroot)
+ for filename, relfile, check, show in _iter_filenames(filenames, process_filenames, relroot):
if show:
print()
+ print(relfile)
print('-------------------------------------------')
- print(filename)
if (reason := check()):
print(reason)
continue
- yield filename
+ yield filename, relfile
-def _iter_filenames(filenames, iter_files):
- if iter_files is None:
- iter_files = fsutil.iter_filenames
- yield from iter_files(filenames)
+def _iter_filenames(filenames, process, relroot):
+ if process is None:
+ yield from fsutil.process_filenames(filenames, relroot=relroot)
return
onempty = Exception('no filenames provided')
- items = iter_files(filenames)
+ items = process(filenames, relroot=relroot)
items, peeked = iterutil.peek_and_iter(items)
if not items:
raise onempty
if isinstance(peeked, str):
+ if relroot and relroot is not fsutil.USE_CWD:
+ relroot = os.path.abspath(relroot)
check = (lambda: True)
for filename, ismany in iterutil.iter_many(items, onempty):
- yield filename, check, ismany
- elif len(peeked) == 3:
+ relfile = fsutil.format_filename(filename, relroot, fixroot=False)
+ yield filename, relfile, check, ismany
+ elif len(peeked) == 4:
yield from items
else:
raise NotImplementedError