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)。