検出器の概要
archlintには、特定されるアーキテクチャやコード品質の問題の種類ごとに分類された、28以上の組み込み検出器が備わっています。
依存関係の問題
| 検出器 | ID | 説明 | デフォルト |
|---|---|---|---|
| 循環依存 | cycles | ファイル間の循環依存 | ✅ |
| 型の循環 | circular_type_deps | 型のみの循環依存 | ❌ |
| パッケージの循環 | package_cycles | パッケージ間の循環依存 | ❌ |
| レイヤー違反 | layer_violation | 定義されたアーキテクチャ階層の違反 | ❌ |
| SDP違反 | sdp_violation | 安定依存原則(SDP)の違反 | ❌ |
モジュールとクラスの設計
| 検出器 | ID | 説明 | デフォルト |
|---|---|---|---|
| ゴッドモジュール | god_module | 責任が多すぎるモジュール | ✅ |
| ハブモジュール | hub_module | 高度に接続された「ハブ」モジュール | ❌ |
| 低い凝集度 | lcom | 内部凝集度が低いクラス (LCOM4) | ❌ |
| 高い結合度 | high_coupling | 依存関係が多すぎるモジュール | ❌ |
| 分散モジュール | module_cohesion | 機能が多すぎるファイルに分散している | ❌ |
| 機能への執着 | feature_envy | 自身のクラスより他のクラスを多く使うメソッド | ❌ |
コード品質と組織
| 検出器 | ID | 説明 | デフォルト |
|---|---|---|---|
| デッドコード | dead_code | 未使用のエクスポート | ✅ |
| デッドシンボル | dead_symbols | 未使用のローカル関数や変数 | ✅ |
| 孤立した型 | orphan_types | コードベースに接続されていない型 | ✅ |
| バレル濫用 | barrel_file | 結合を引き起こす巨大なバレルファイル | ✅ |
| 基本データ型への執着 | primitive_obsession | ドメイン型の代わりに基本型を過度に使用 | ❌ |
複雑度とサイズ
| 検出器 | ID | 説明 | デフォルト |
|---|---|---|---|
| 高い複雑度 | complexity | 循環的複雑度が高い関数 | ✅ |
| 深いネスト | deep_nesting | 深くネストされたコードブロック | ✅ |
| 多すぎる引数 | long_params | 引数が多すぎる関数 | ✅ |
| 巨大なファイル | large_file | サイズが大きすぎるソースファイル | ✅ |
変更パターン
| 検出器 | ID | 説明 | デフォルト |
|---|---|---|---|
| 散弾銃の手術 | shotgun_surgery | 多くのファイルの変更を必要とする変更 | ❌ |
| 不安定なインターフェース | unstable_interface | 頻繁に変更される公開インターフェース | ❌ |
実行時と安全性
| 検出器 | ID | 説明 | デフォルト |
|---|---|---|---|
| テストの漏洩 | test_leakage | テストコードの本番環境への漏洩 | ❌ |
| ベンダー結合 | vendor_coupling | 外部ライブラリへの密結合 | ❌ |
| ハブ依存 | hub_dependency | 外部パッケージへの過度な依存 | ❌ |
| 副作用のあるインポート | side_effect_import | 副作用を引き起こすインポート | ✅ |
| 共有された可変状態 | shared_state | エクスポートされた可変変数 | ❌ |
アーキテクチャ・メトリクス
| 検出器 | ID | 説明 | デフォルト |
|---|---|---|---|
| 抽象性違反 | abstractness | 苦痛/無用ゾーン (I+Aメトリクス) | ❌ |
| 分散した設定 | scattered_config | 多くのファイルに分散した設定 | ❌ |
| コードクローン | code_clone | プロジェクト全体のコードの重複 | ✅ |