diff options
| author | Eric Snow <ericsnowcurrently@gmail.com> | 2020-11-20 15:39:28 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-20 15:39:28 -0700 |
| commit | 9f02b479e6b6b48d0c2aad621978cff82e530b15 (patch) | |
| tree | 0632759170527a66070fc495bb832a5e7b256eb7 /Tools/c-analyzer/c_common/scriptutil.py | |
| parent | a993e901ebe60c38d46ecb31f771d0b4a206828c (diff) | |
| download | cpython-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.py | 34 |
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 |
