minikin/cargo-crap

Change Risk Anti-Patterns (CRAP) metric for Rust projects

解决的问题

cargo-crap 旨在识别“复杂且未测试”的 Rust 函数。它针对代码库中逻辑复杂(高循环复杂度)但缺乏足够测试覆盖率的风险区域,这些区域在修改时最有可能引发回归问题。

工作原理

该工具使用 syn 解析 Rust 源代码,并读取由 cargo-llvm-cov 或 cargo tarpaulin 等工具生成的 LCOV 覆盖率文件。它使用以下公式为每个函数计算 CRAP(变更风险反模式)分数:

CRAP(m) = comp(m)² × (1 − cov(m)/100)³ + comp(m)

其中 comp 为循环复杂度,cov 为行覆盖率百分比。分数越高,表示函数既复杂又测试不足。该工具可集成到 CI/CD 流水线中,当分数超过特定阈值或出现分数退化时,使构建失败。

适用人群

希望保持高代码质量和测试覆盖率的 Rust 开发者及团队,特别是处理 AI 生成代码时,这类代码可能隐藏复杂性。

特色亮点

  • CI/CD 集成:支持基于阈值或回归门禁失败构建,防止质量下降。
  • LCOV 兼容:与标准 Rust 覆盖率工具兼容。
  • 详细报告:提供包含覆盖率百分比和未覆盖行范围的表格。
  • AI 驱动的优先级排序:可选集成 TypeSafe,基于逻辑而非结构分析重复函数,判断是否应合并。
  • 多种输出格式:支持人类可读表格、Markdown、PR 评论和 JSON。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目