pre-commit 使用说明
本项目已配置 pre-commit 钩子,用于在提交代码时自动进行代码规范检查和格式化。
安装与初始化
pip install pre-commit
pre-commit install --hook-type commit-msg
pre-commit install
手动运行检查
pre-commit run --all-files
pre-commit run --hook-stage commit-msg --commit-msg-filename .git/COMMIT_EDITMSG
配置详情
本项目使用以下两组钩子:
- conventional-commit: 检查提交消息是否符合 Conventional Commits 规范
- add-signoff-and-change-id: 自动添加 Sign-off-by 和 Change-Id
- check-sr: 检查 .sr 文件
- check-json: 检查 JSON 文件
- check-yaml: 检查 YAML 文件
- clang-format: 使用 clang-format 22 自动格式化 C/C++ 源文件(基于
.clang-format配置)
- trailing-whitespace: 修复行尾多余空白(排除 .vscode/、*.bin)
- end-of-file-fixer: 修复文件末尾缺少换行(排除 .vscode/、*.bin)
- check-merge-conflict: 检查合并冲突标记
- check-added-large-files: 防止提交大文件(限制 1024KB)
- check-case-conflict: 检查文件名大小写冲突
- detect-private-key: 检测私钥泄露
clang-tidy 静态检查
通过 bingo test -ct 在开发者测试阶段自动执行 clang-tidy 静态代码分析,检查代码规范问题。
使用方式
# 运行 clang-tidy 静态检查
bingo test -ct -jit
# 结合单元测试一起运行
bingo test -ut -ct -jit
前置条件
- 已安装
clang-tidy>= 22(Ubuntu 22.04 默认apt install clang-tidy安装的是 LLVM 14,不满足版本要求,需通过 LLVM 官方源安装):
# Ubuntu 22.04 安装 clang-tidy 22(使用 LLVM 官方 APT 源)
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 22
rm llvm.sh
sudo apt install clang-tidy-22
# 验证版本
clang-tidy-22 --version
- 组件根目录存在
.clang-tidy配置文件(本仓库已提供)
工作原理
- 构建组件并生成
compile_commands.json编译数据库 - 调用
run-clang-tidy并行执行检查,使用组件根目录的.clang-tidy配置 - 自动过滤第三方依赖路径(如 conan 缓存、系统头文件、工具链目录等)的告警
- 过滤后的报告写入
temp/clang-tidy/clang-tidy-report.txt - 告警摘要在测试流程末尾按类型统计输出
前置条件校验
bingo test -ct 执行前依次检查以下条件,任一不满足则跳过检查并输出提示,不阻塞测试流程:
| 缺失项 | 提示信息 |
|---|---|
clang-tidy 未安装 |
clang-tidy 未安装, 跳过检查 |
compile_commands.json 不存在 |
构建产物缺失,跳过检查 |
.clang-tidy 配置文件不存在 |
.clang-tidy 配置文件不存在, 跳过 clang-tidy 检查 |
输出示例
检查发现告警时:
WARN: clang-tidy 发现 5 类告警:
WARN: readability-function-size 39
WARN: cppcoreguidelines-special-member-functions 7
WARN: readability-make-member-function-const 6
WARN: readability-isolate-declaration 2
WARN: misc-unused-parameters 1
检查通过时:
INFO: clang-tidy 检查通过,无告警
INFO: clang-tidy 报告已保存至: temp/clang-tidy/clang-tidy-report.txt
自定义检查规则
修改组件根目录的 .clang-tidy 配置文件的 Checks 字段即可增减检查规则,示例:
Checks: '-*,readability-function-size,readability-make-member-function-const'
HeaderFilterRegex: '.*'
详见 clang-tidy 官方文档。
许可证
Mulan PSL v2 许可证,详见 LICENSE 文件