minikin/cargo-crap
Change Risk Anti-Patterns (CRAP) metric for Rust projects
解决的问题
它通过寻找既复杂又缺乏测试的函数,来识别 Rust 项目中的“劣质”代码。这有助于开发者找到最可能隐藏 Bug 的地方,特别是在复杂度可能很高但测试覆盖率不足的 AI 生成代码中。
工作原理
该工具计算 CRAP (Change Risk Anti-Patterns) 指标,该指标将圈复杂度 (CC) 和测试覆盖率合并为一个单一分数。
- 低分(例如 1.0)表示一个简单且完全覆盖的函数。
- 高分表示一个复杂且缺乏覆盖率的函数。
- 如果一个函数的覆盖率为 100%,则 CRAP 分数等于其圈复杂度。
- 具有极高复杂度(CC > 30)的函数无论其测试覆盖率如何,都会被标记。
适用对象
希望在 CI/CD 流水线中集成自动化代码质量门禁,以防止复杂且未经测试的代码进入生产代码库的 Rust 开发者和团队。
亮点
- CI 集成:支持
--fail-above,如果任何函数超过特定阈值,则以错误状态退出。 - 基准对比:可以将当前结果与 JSON 基准进行比较,以检测代码质量的退化。
- 多种输出格式:支持人类可读的表格、JSON、GitHub annotations、Markdown、SARIF 和 Shields.io徽章。
- 工作区支持:能够分析整个 Cargo 工作区 (monorepos)。