rubocop の --force-exclusion オプションは Exclude だけじゃなく Include も見てくれる

どうも @shutooike です。

結論はタイトルのままです。

--force-exclusion とは

Force excluding files specified in the configuration Exclude even if they are explicitly passed as arguments. Basic Usage :: RuboCop Docs

引数として明示的に渡されたファイルであっても Exclude に指定されているファイルは強制的に除外するぜ。というオプションです。

以下の記事がわかりやすいです。

commis.hatenablog.com

意外な挙動

Exclude は強制的に適用できた。じゃあ Include も強制的に適用したいなーと思い、対象ファイルを抽出するコードを見ていると

    def process_explicit_path(path, mode)
      files = path.include?('*') ? Dir[path] : [path]

      if mode == :only_recognized_file_types || force_exclusion?
        files.select! { |file| included_file?(file) }
      end

rubocop/lib/rubocop/target_finder.rb at master · rubocop/rubocop · GitHub

mode == :only_recognized_file_types の時に Include を見てくれてそうです。

Inspect files given on the command line only if they are listed in AllCops/Include parameters of user configuration or default configuration. Basic Usage :: RuboCop Docs

オプションを探すと --only-recognized-file-types がありました。説明も僕が求めていたものです。ビンゴ


ただよくみると force_exclusion? の時も Include を見ています。あれ、既視感...

    def force_exclusion?
      @options[:force_exclusion]
    end

rubocop/lib/rubocop/target_finder.rb at master · rubocop/rubocop · GitHub

--force-exclusion オプションでも Include 見てくれました。

以上です。