minikin/cargo-crap

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

何を解決するか

cargo-crap は、Rust関数の「複雑でテストされていない」ものを特定することを目的としています。関数が論理的に複雑(サイクロマティック複雑度が高い)である一方で、十分なテストカバレッジが不足しているコードベース内のリスク領域をターゲットとしています。これは、変更が最もリグレッションを引き起こす可能性がある場所です。

動作方法

このツールは syn を使ってRustのソースコードを解析し、cargo-llvm-cov や cargo tarpaulin などのツールによって生成された LCOV カバレッジファイルを読み取ります。各関数に対して CRAP(Change Risk Anti-Patterns)スコア を以下の式で計算します:

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

ここで comp はサイクロマティック複雑度、cov は行カバレッジのパーセンテージです。高いスコアは、複雑でかつ十分にテストされていない関数を示します。このツールはCI/CDパイプラインに統合でき、スコアが特定のしきい値を超える、またはスコアの劣化が発生した場合にビルドを失敗させることができます。

対象ユーザー

AI生成コードに特に注意を払い、高いコード品質とテストカバレッジを維持したいRust開発者やチーム向けです。AI生成コードは、隠れた複雑性を含む可能性があるため、特に重要です。

特徴

  • CI/CD統合: しきい値やレグレッションゲートに基づいてビルドを失敗させる機能で、品質の低下を防ぎます。
  • LCOV互換性: 標準的なRustカバレッジツールと互換性があります。
  • 詳細なレポート: カバレッジパーセンテージと未カバー行範囲を含むテーブルを提供します。
  • AI駆動のトリアージ: オプションで TypeSafe と統合し、関数の論理的類似性に基づいて重複関数をマージすべきかどうかを判断できます(構造だけでなく論理に基づく)。
  • 複数の出力形式: 人間が読みやすいテーブル、Markdown、PRコメント、JSON形式をサポートしています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト