Rubocop 忽略 .rubocop.yml 中指定的排除项

Rubocop ignoring excludes specified in .rubocop.yml

我在 CircleCI 中使用 Rubocop。它被配置为忽略 db 文件夹。但它仍然有例外地回来。我在 CI 中使用自定义 rake 任务,这可能是原因。我如何修改它以使其忽略那些被排除的 files/dirs?

rubocop.rake

# frozen_string_literal: true
namespace :rubocop do
  require 'rubocop/rake_task'

  desc 'Run RuboCop on entire project'
  RuboCop::RakeTask.new('all') do |task|
    task.fail_on_error = true
  end

  desc 'Run RuboCop on the project based on git diff(DIFF_BRANCH environment variable)'
  RuboCop::RakeTask.new('git_diff') do |task|
    task.patterns = patterns_for_changed_files
    task.fail_on_error = true
  end

  def changed_files
    diff_branch = ENV['DIFF_BRANCH'] || 'staging'
    cmd = %(git diff-tree -r --no-commit-id --diff-filter=M --name-only HEAD origin/#{diff_branch})
    diff = `#{cmd}`
    diff.split "\n"
    # diff.gsub!(/^(db\/|vendor\/|tmp\/|lib\/|test\/|bin\/)/, '').split "\n"
  end

  def patterns_for_changed_files
    patterns = []
    patterns + changed_files
  end
end

.rubocop.yml

AllCops:
  Exclude:
    - 'vendor/**/*'
    - 'tmp/**/*'
    - 'lib/**/*'
    - 'test/**/*'
    - 'bin/*'
    - 'config/**/*.yml'
    - 'db/**/*'
    - 'db/schema.rb'

如果您 运行 来自 Rake 任务的 Rubocop,这是预期的行为。另见 related issue on Github.

我个人建议 运行 从带有命令行参数的 shell 脚本中获取它。 要实现检查更改文件,可以使用pronto in conjunction with pronto-rubocop.