https://github.com/wonbinbk updated 
https://github.com/llvm/llvm-project/pull/120348

>From 800dbc34337f3504d647a74bbfda0625f3b0cd75 Mon Sep 17 00:00:00 2001
From: wonbinbk <thai...@gmail.com>
Date: Wed, 18 Dec 2024 15:33:55 +1300
Subject: [PATCH 1/2] [clang-tidy] Add an option to exclude files not present
 in the compilation database

A change list may include files that are not part of the compilation
database, which can cause clang-tidy to fail (e.g., due to missing
included headers). To prevent false negatives, we should allow to skip
processing these files.
---
 .../clang-tidy/tool/clang-tidy-diff.py        | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)

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..a1d3598422bf24 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,21 @@ def merge_replacement_files(tmpdir, mergefile):
         open(mergefile, "w").close()
 
 
+def get_compiling_files(args):
+    """ Read a compile_commands.json database and return a set of file paths 
"""
+    current_dir = Path.cwd()
+    compile_commands_json = (current_dir / args.build_path) if args.build_path 
else current_dir
+    compile_commands_json = (compile_commands_json / "compile_commands.json")
+    files = set()
+    with open(compile_commands_json) as db_file:
+        db_json = json.load(db_file)
+        for entry in db_json:
+            if "file" not in entry:
+                continue
+            files.add(Path(entry["file"]))
+    return files
+
+
 def main():
     parser = argparse.ArgumentParser(
         description="Run clang-tidy against changed files, and "
@@ -234,6 +250,13 @@ def main():
         action="store_true",
         help="Allow empty enabled checks.",
     )
+    parser.add_argument(
+        "-only-check-in-db",
+        dest="skip_non_compiling",
+        default=False,
+        action="store_true",
+        help="Only check files in the compilation database",
+    )
 
     clang_tidy_args = []
     argv = sys.argv[1:]
@@ -243,6 +266,8 @@ def main():
 
     args = parser.parse_args(argv)
 
+    compiling_files = get_compiling_files(args) if args.skip_non_compiling 
else None
+
     # Extract changed lines for each file.
     filename = None
     lines_by_file = {}
@@ -260,6 +285,10 @@ def main():
             if not re.match("^%s$" % args.iregex, filename, re.IGNORECASE):
                 continue
 
+        # Skip any files not in the compiling list
+        if compiling_files is not None and (Path.cwd() / filename) not in 
compiling_files:
+            continue
+
         match = re.search(r"^@@.*\+(\d+)(,(\d+))?", line)
         if match:
             start_line = int(match.group(1))

>From 5d912c85716e79964637a9b42c08e44ef24d5ec6 Mon Sep 17 00:00:00 2001
From: wonbinbk <thai...@gmail.com>
Date: Tue, 24 Dec 2024 09:54:05 +1300
Subject: [PATCH 2/2] [clang-tidy] Use raw string for regex pattern

---
 clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 a1d3598422bf24..2cb1cc4598073b 100755
--- a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
+++ b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py
@@ -272,7 +272,7 @@ def main():
     filename = None
     lines_by_file = {}
     for line in sys.stdin:
-        match = re.search('^\\+\\+\\+\\ "?(.*?/){%s}([^ \t\n"]*)' % args.p, 
line)
+        match = re.search(r'^\+\+\+\ "?(.*?/){%s}([^ \t\n"]*)' % args.p, line)
         if match:
             filename = match.group(2)
         if filename is None:

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to