memgraph/tools/pre-commit/clang-tidy.py

57 lines
1.9 KiB
Python
Raw Normal View History

#!/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()