これはなに
- RuboCop には Inheritance というオプションがあり、設定を複数ファイルに記述またはリモートのファイルを参照し、読み込むことができる
- Inheritance の設定をしても、ルールが重複している場合、意図したルールが適用されなかったため対応した際のメモを記事にしました
Inheritance とは
RuboCop のルールは rubocop.yml に設定を記載することが多いが、共通の設定を読み込む場合 remote URL を指定したり、 Gemfile 等に定義している gem の中から定義を参照できます
rubocop --auto-gen-config のコマンドを実行して生成する .rubocop_todo.yml も inherit_from で読み込むため、自然に利用している人も多いはずです
inherit_from の詳細については、以下 URL の「Inheriting configuration from a remote URL」を確認してください
inherit_mode を指定する
Inheritance で複数設定を参照しつつ、定義が重複したときにどのように振る舞うか設定を inherit_mode で定義することができます
inherit_mode は override と merge を設定することができデフォルトは override になっています
以下は .rubocop.yml と .rubocop_todo.yml の各ルールで定義されている Exclude 条件を merge する場合に利用します
inherit_from:
- .rubocop_todo.yml
inherit_mode:
merge:
- Exclude
最後に
なるべくルールや設定の重複は避け上書きしていくべきと考えていますが、
プロジェクトの方針や状況に応じて柔軟な適用を必要とされるケースもあることを実感しました。
Reference