| name | rust-clippy |
| description | Rust Clippy 静态分析技能:使用 cargo clippy 进行 Rust 代码质量检测,配合 cargo fix 自动修复 |
Rust Clippy 静态分析技能
执行流程
步骤1:确定项目路径
PROJECT_DIR=.
步骤2:执行 Clippy 检查
cargo clippy
cargo clippy --all-targets
cargo clippy -p <package_name>
cargo clippy -- --deny warnings
cargo clippy -- --allow <lint_name>
cargo clippy -- --deny <lint_name>
步骤3:自动修复
cargo clippy --fix
cargo clippy --fix --allow-dirty --allow-staged
cargo clippy --all-targets
步骤4:输出与报告
cargo clippy --message-format=json > clippy-report.json
cargo clippy --message-format=short
报告模板见 templates/report.md。
Lint 级别与组
| 级别 | 描述 | 组名 | 严格程度 |
|---|
| allow | 允许,不提示 | clippy::all(默认) | 适中 |
| warn | 警告 | clippy::pedantic | 严格 |
| deny | 错误,阻止编译 | clippy::correctness | 严格 |
| forbid | 禁止,无法覆盖 | clippy::restriction | 最严格 |
其他组:style(宽松)、complexity(适中)、perf(适中)、cargo(宽松)、nursery(不稳定)。
启用/禁用 Lint
命令行
cargo clippy -- --clippy::pedantic
cargo clippy -- --allow clippy::too_many_arguments
cargo clippy -- --clippy::pedantic --deny clippy::unwrap_used
代码内属性
#![warn(clippy::pedantic)]
#![allow(clippy::too_many_lines)]
#[allow(clippy::too_many_arguments)]
fn complex_function(a: i32, b: i32, c: i32, d: i32, e: i32) {}
Cargo.toml 配置
[lints]
workspace = true
[workspace.lints.clippy]
pedantic = "warn"
unwrap_used = "deny"
too_many_arguments = "allow"
CI 集成
模板见 templates/ 目录:
ci-github-actions.yaml — GitHub Actions
ci-pre-commit.yaml — pre-commit hook
Makefile — Make 目标
分析结果处理
cargo clippy --message-format=json 2>/dev/null | \
jq -r 'select(.message != null) | .message.code | .code // empty' | \
sort | uniq -c | sort -nr
cargo clippy --message-format=json 2>/dev/null | \
jq -r 'select(.message != null and .message.level == "error") | .message.rendered'
典型场景
| 场景 | 命令 |
|---|
| 快速检查 | cargo clippy --all-targets |
| CI 严格模式 | cargo clippy --all-targets -- --deny warnings |
| 渐进式采用 | --fix → --warn clippy::pedantic → --deny clippy::unwrap_used |
| 修复后验证 | cargo clippy --fix --allow-dirty && cargo clippy --all-targets -- --deny warnings && cargo test |
最佳实践
- CI 中 deny warnings
- 渐进式采用:从
clippy::all 到 pedantic
- 自动修复优先:先用
--fix
- 合理例外用
#[allow()] 并附注释
- 先 rustfmt 再 clippy
- 定期
rustup update
注意事项
--fix 可能改变语义,修复后务必测试
nursery 组不稳定,可能变化
restriction 需手动启用
- 与
#[deny(warnings)] 冲突时 clippy 警告也会被拒绝
技能版本: 1.0.0 | 工具: cargo clippy | 适用: Rust 项目