llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tidy Author: zotnhucucbot (wonbinbk) <details> <summary>Changes</summary> A change list may include files that are not part of the compile database, which can cause clang-tidy to fail (e.g., due to missing included headers). To prevent false negatives, we should skip processing these files. --- Full diff: https://github.com/llvm/llvm-project/pull/120325.diff 1 Files Affected: - (modified) clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py (+24) ``````````diff diff --git a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py index 62cb4297c50f75..00a8c98506216b 100755 --- a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py +++ b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py @@ -35,6 +35,7 @@ import tempfile import threading import traceback +from pathlib import Path try: import yaml @@ -124,6 +125,19 @@ def merge_replacement_files(tmpdir, mergefile): open(mergefile, "w").close() +def get_compiling_file_list(compiledb : Path) -> list[Path]: + """ Read a compile_commands.json database and return a list of file paths """ + file_list = [] + with open(compiledb) as db_file: + db_json = json.load(db_file) + for entry in db_json: + if "file" not in entry: + continue + if entry["file"] not in file_list: + file_list.append(Path(entry["file"])) + return file_list + + def main(): parser = argparse.ArgumentParser( description="Run clang-tidy against changed files, and " @@ -243,6 +257,12 @@ def main(): args = parser.parse_args(argv) + # Read compile_commands.json database to extract a compiling file list + current_dir = Path(__file__).parent.resolve() + compile_commands_json = (current_dir / args.build_path) if args.build_path else current_dir + compile_commands_json = (compile_commands_json / "compile_commands.json") + compiling_files = get_compiling_file_list(compile_commands_json) + # Extract changed lines for each file. filename = None lines_by_file = {} @@ -260,6 +280,10 @@ def main(): if not re.match("^%s$" % args.iregex, filename, re.IGNORECASE): continue + # Skip any files not in the compiling list + if (current_dir / filename) not in compiling_files: + continue + match = re.search(r"^@@.*\+(\d+)(,(\d+))?", line) if match: start_line = int(match.group(1)) `````````` </details> https://github.com/llvm/llvm-project/pull/120325 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits