Подтвердить что ты не робот

Как интегрировать rubocop с Rake?

rubocop - это проверка стиля кода для Ruby. Аналогичный инструмент для rubocop, Cane, может быть интегрирован с Rake. Я предпочитаю rubocop для Cane, так как rubocop делает проверки на основе Ruby Style Guide и кажется, что spot больше проблем. Чтобы автоматизировать процесс проверки стиля, я хотел бы интегрировать rubocop с Rake так, чтобы сборка завершилась неудачей, если отсутствует качество кода.

Gem уже поддерживает добавление тестов в пакеты через Rake. Я хотел бы сделать то же самое со строковыми проверками, чтобы проверки стиля выполнялись вместе с тестами. Как я могу это сделать?

Если это помогает начать с Rakefile, это одно:

# -*- coding: utf-8; mode: ruby -*-

require 'bundler/gem_tasks'
require 'rake/testtask'

Rake::TestTask.new do |t|
  t.libs << 'test'
  t.test_files = FileList['test/unit/test*.rb']
end

desc 'Run tests'
task default: :test
4b9b3361

Ответ 1

Я бы порекомендовал обстреливать программу rubocop. Это самое простое решение. Просто добавьте это в свой Rakefile:

task test: :rubocop

task :rubocop do
  sh 'rubocop'
end

Ответ 2

Начиная с версии 0.10.0 rubocop содержит пользовательскую задачу rake, которую вы можете использовать. Просто поставьте следующее в Rakefile

require 'rubocop/rake_task'

RuboCop::RakeTask.new

Обязательно используйте верхний регистр "R" и "C", или вы получите NameError.

Ответ 3

Я очень рекомендую,

require 'rubocop/rake_task'

RuboCop::RakeTask.new(:rubocop) do |t|
  t.options = ['--display-cop-names']
end

Это использует рубокопные собственные рейк-задачи и позволяет вам передавать параметры, если хотите.

Ответ 4

Вы, вероятно, найдете https://github.com/yujinakayama/guard-rubocop полезным, если используете Guard для своих тестов RSpec. Это позволяет Rubocop дать вам мгновенную обратную связь, как только вы сохраните файл вместе с результатами своих тестов.

Ответ 5

Вы можете выложить оболочку через Rake с параметрами, которые вы предпочитаете:

  desc 'Run Rubocop with options'
  task rubocop: :environment do
    sh 'bundle exec rubocop -D --format offenses --format progress || true'
  end

Затем я рекомендую изменить задачу по умолчанию, чтобы включить вывод. Хитрость заключается в том, чтобы очистить задачу, а затем добавить обратно то, что вы хотите. Обратите внимание на необходимость завершения || true, чтобы ошибка из Rubocop не помешала запуску следующей задачи. Вот что я делаю, что также использует параллельные тесты:

task(:default).clear.enhance ['parallel:parallel_prepare', 'parallel:spec',
                              'parallel:features', 'lint:rubocop',
                              'lint:rails_best_practices']