summaryrefslogtreecommitdiff
path: root/lint/run_clang_tidy.py
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2025-06-12 11:42:47 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2025-06-13 12:19:02 +0200
commitd46051807e37bd1e28a4c6ecd60d3a9f92103cc7 (patch)
tree9ddc088cd29e866f1d70384dd95066aba60820a3 /lint/run_clang_tidy.py
parent551a068668cd08ae5025aa05eacd6eb934ca9c4b (diff)
downloadjustbuild-d46051807e37bd1e28a4c6ecd60d3a9f92103cc7.tar.gz
Add a lint target for clang-tidy
... using the already-committed configuration file and the version of clang-tidy that was imported from the toolchain.
Diffstat (limited to 'lint/run_clang_tidy.py')
-rwxr-xr-xlint/run_clang_tidy.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/lint/run_clang_tidy.py b/lint/run_clang_tidy.py
new file mode 100755
index 00000000..3fb8a595
--- /dev/null
+++ b/lint/run_clang_tidy.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+# Copyright 2025 Huawei Cloud Computing Technology Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json
+import os
+import shutil
+import subprocess
+import sys
+
+
+def dump_meta(src, cmd):
+ OUT = os.environ.get("OUT")
+ if OUT:
+ with open(os.path.join(OUT, "config.json"), "w") as f:
+ json.dump({"src": src, "cmd": cmd}, f)
+
+
+def run_lint(src, cmd):
+ dump_meta(src, cmd)
+ config = os.environ.get("CONFIG")
+ shutil.copyfile(os.path.join(config, ".clang-tidy"), ".clang-tidy")
+ extra = ["-Wno-unused-command-line-argument"]
+ if src.endswith(".tpp"):
+ extra += ["-x", "c++"]
+ db = [{
+ "directory": os.getcwd(),
+ "arguments": cmd[:1] + extra + cmd[1:],
+ "file": src
+ }]
+ with open("compile_commands.json", "w") as f:
+ json.dump(db, f)
+ new_cmd = [
+ os.path.join(config, "toolchain", "bin", "clang-tidy"),
+ src,
+ ]
+ print("Running cmd %r with db %r" % (new_cmd, db), file=sys.stderr)
+ return subprocess.run(new_cmd).returncode
+
+
+if __name__ == "__main__":
+ sys.exit(run_lint(sys.argv[1], sys.argv[2:]))