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

配置详情

本项目使用以下两组钩子:

openUBMC pre-commit-hooks:

  • 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 配置)

pre-commit-hooks (mirrored):

  • 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 配置文件(本仓库已提供)

工作原理

  1. 构建组件并生成 compile_commands.json 编译数据库
  2. 调用 run-clang-tidy 并行执行检查,使用组件根目录的 .clang-tidy 配置
  3. 自动过滤第三方依赖路径(如 conan 缓存、系统头文件、工具链目录等)的告警
  4. 过滤后的报告写入 temp/clang-tidy/clang-tidy-report.txt
  5. 告警摘要在测试流程末尾按类型统计输出

前置条件校验

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 文件