- Add .clang-tidy (analyzer + selected bugprone) and .clang-format (LLVM, 4-space, 100 cols) - Enhance scripts/run-linter.sh to use compile_commands.json when available - Add scripts/setup-hooks.sh pre-commit (format enforcement; advisory tidy) - Update azure-pipelines.yml to export compile_commands and run clang-tidy -p build - Fill docs/linter-setup.md and docs/coding-standards.md for Phase 1 - Add minimal tests in tests/test_main.cpp to ensure CI executes - Rewrite README with Phase 1 workflow
1.6 KiB
1.6 KiB
Linter Setup (Phase 1)
本文件說明如何在本地與 CI 環境執行 Phase 1 的 linter 自動化。
需求
- clang-tidy, clang-format
- CMake 3.10+
本地流程
-
安裝工具
- Ubuntu/Debian:
sudo apt install clang-tidy clang-format cmake
- macOS:
brew install llvm cmake
- Ubuntu/Debian:
-
產出 compile_commands.json(建議,提高 tidy 準確度)
mkdir -p build && cd build
cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
cd -
-
執行 linter
./scripts/run-linter.sh
- 若偵測到
build/compile_commands.json
,腳本會自動以-p build
方式執行 clang-tidy。
-
安裝 Git hooks(建議)
./scripts/setup-hooks.sh
- pre-commit 會:
- 對 staged C/C++ 檔執行 clang-format 並重新加入索引;若有改動會中止一次提交,請重新檢視並再次提交。
- 以建議模式執行 clang-tidy(不阻擋提交)。
CI 流程(Azure Pipelines)
- 安裝工具 →
clang-format --dry-run --Werror
→ CMake 匯出compile_commands.json
→ 以-p build
跑 clang-tidy(建議模式)→ Build → Run tests。 - Pull Request Job 只分析變更檔案,並以建議模式跑 clang-tidy。
Phase 1 政策
- 格式:必須符合
.clang-format
,否則 CI 失敗、pre-commit 會自動修正。 - Tidy:使用
.clang-tidy
的安全規則集合,僅回報警告,不使 CI 失敗。
後續升級(概述)
- Phase 2:對關鍵規則(記憶體/資源/未定義行為)提升為失敗門檻。
- Phase 3:擴大規則(readability/modernize),對 PR 變更檔強制。