minikin/cargo-crap

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

解決する課題

Rustプロジェクトにおける「質の低い」コードを、複雑性が高くテストが不十分な関数を見つけることで特定します。これにより、特に複雑性が高くテストカバレッジが不足しがちなAI生成コードにおいて、バグが潜んでいる可能性が高い箇所を開発者が特定するのに役立ちます。

仕組み

このツールは、循環的複雑度 (CC) とテストカバレッジを単一のスコアに統合した CRAP (Change Risk Anti-Patterns) メトリクスを算出します。

  • 低いスコア(例:1.0)は、単純で完全にテストされている関数を示します。
  • 高いスコアは、複雑でテストカバレッジが不足している関数を示します。
  • 関数が100%のカバー率を持つ場合、CRAPスコアはその循環的複雑度と等しくなります。
  • 非常に高い複雑度(CC > 30)を持つ関数は、テストカバレッジに関係なくフラグが立てられます。

対象者

複雑でテストされていないコードがプロダクションのコードベースに混入するのを防ぐために、CI/CDパイプラインに自動化されたコード品質ゲートを統合したいRustの開発者およびチーム。

特徴

  • CI統合: --fail-above をサポートしており、関数が特定の閾値を超えた場合にエラーとして終了します。
  • ベースライン比較: 現在の結果をJSONベースラインと比較して、コード品質の退行を検出できます。
  • 複数の出力形式: 人間が読みやすいテーブル、JSON、GitHub annotations、Markdown、SARIF、および Shields.io バッジをサポートしています。
  • ワークスペース対応: Cargoワークスペース(モノレポ)全体を分析できます。