コードクローン
ID: code_clone | 重要度: 中 (デフォルト)
この検出器は、プロジェクト内の重複したコードブロックを特定します。ASTベースのトークン化を使用して、フォーマットやコメントの違いを無視しながら、正確に一致する箇所を検出します。
なぜこれが「におい」なのか
- メンテナンスコストの増大: バグの修正や変更を行う際、すべての重複箇所を更新する必要があります。
- DRY原則の違反: 重複は、抽象化や再利用が不足している明確なサインです。
- 不整合な進化: 時間の経過とともに重複箇所が少しずつ異なっていく可能性があり、それが潜在的なバグやリファクタリングの困難さにつながります。
修正方法
- メソッドの抽出 (Extract Method): 共有ロジックを単一の関数に移動し、複数の場所から呼び出すようにします。
- 汎用コンポーネント: UIコードの場合は、プロップスを持つ再利用可能なコンポーネントを作成します。
- ユーティリティモジュール: 共通のヘルパーロジックを共有ユーティリティファイルに移動します。
設定
yaml
rules:
code_clone:
enabled: true
severity: medium
min_tokens: 50
min_lines: 6オプション
min_tokens: クローン検出をトリガーする最小正規化トークン数(デフォルト: 50)。min_lines: クローンがまたがる最小行数(デフォルト: 6)。
ESLint ルール
この検出器は、エディタでリアルタイムのフィードバックを得るための ESLint ルールとして利用可能です。
javascript
// eslint.config.js
export default [
{
rules: {
'@archlinter/no-code-clone': 'warn',
},
},
];セットアップ方法については、ESLint 統合を参照してください。