57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import argparse
|
||
|
import os
|
||
|
import subprocess
|
||
|
import sys
|
||
|
|
||
|
CLANG_TIDY_DIFF = "./tools/github/clang-tidy/clang-tidy-diff.py"
|
||
|
|
||
|
|
||
|
def check_clang_tidy():
|
||
|
try:
|
||
|
subprocess.run(["clang-tidy", "--version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||
|
except FileNotFoundError:
|
||
|
print("clang-tidy is not installed. Please install clang-tidy and try again.", file=sys.stderr)
|
||
|
sys.exit(1)
|
||
|
except subprocess.CalledProcessError:
|
||
|
print("Error while checking clang-tidy version.", file=sys.stderr)
|
||
|
sys.exit(1)
|
||
|
|
||
|
if not os.path.exists(CLANG_TIDY_DIFF):
|
||
|
print(f"Error can't find '{CLANG_TIDY_DIFF}'.", file=sys.stderr)
|
||
|
sys.exit(1)
|
||
|
|
||
|
|
||
|
def run_clang_tidy_on_files(compile_commands_path):
|
||
|
process1 = subprocess.Popen("git diff -U0 HEAD".split(), stdout=subprocess.PIPE)
|
||
|
process2 = subprocess.Popen(
|
||
|
f"{CLANG_TIDY_DIFF} -p1 -j 8 -path {compile_commands_path}".split(),
|
||
|
stdin=process1.stdout,
|
||
|
stdout=subprocess.PIPE,
|
||
|
)
|
||
|
process1.stdout.close() # Close the output pipe of the first process
|
||
|
output, err_output = process2.communicate() # Get the output from the second process
|
||
|
if process2.returncode != 0:
|
||
|
print("Error occurred in clang-tidy-diff command:")
|
||
|
if output:
|
||
|
print(output.decode().strip())
|
||
|
if err_output:
|
||
|
print(err_output.decode().strip(), file=sys.stderr)
|
||
|
sys.exit(1)
|
||
|
|
||
|
|
||
|
def main():
|
||
|
check_clang_tidy()
|
||
|
|
||
|
parser = argparse.ArgumentParser(description="Run clang-tidy on specified files.")
|
||
|
# parser.add_argument("file_paths", nargs="+", type=str, help="Paths to files to be checked.")
|
||
|
parser.add_argument("--compile_commands_path", type=str, required=True, help="Path to compile_commands.json.")
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
run_clang_tidy_on_files(args.compile_commands_path)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|