#!/bin/bash # 本地執行 linter 的腳本 echo "Running clang-tidy on C++ files..." # 檢查 clang-tidy 是否存在 if ! command -v clang-tidy &> /dev/null; then echo "clang-tidy not found. Please install it first." echo "Ubuntu/Debian: sudo apt install clang-tidy" echo "macOS: brew install llvm" exit 1 fi # 尋找所有 C++ 檔案 CPP_FILES=$(find src tests -type f \( -name "*.cpp" -o -name "*.cxx" -o -name "*.cc" -o -name "*.c++" -o -name "*.h" -o -name "*.hpp" -o -name "*.hxx" \) 2>/dev/null) if [ -z "$CPP_FILES" ]; then echo "No C++ files found." exit 0 fi echo "Found files:" echo "$CPP_FILES" echo # 若存在 compile_commands.json,則使用 -p 指向 build 目錄以提高精準度 TIDY_CMD_BASE=(clang-tidy --config-file=.clang-tidy) if [ -f "build/compile_commands.json" ]; then echo "Detected build/compile_commands.json; using -p build" TIDY_CMD_BASE+=( -p build ) else echo "No compile_commands.json detected. For better results, run:" echo " mkdir -p build && cd build && cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON && cd -" fi # 執行 clang-tidy(保持 Phase 1:僅回報,不讓流程失敗) echo "$CPP_FILES" | xargs -r "${TIDY_CMD_BASE[@]}" echo "Linter check completed."