如何将rubocop与Rake集成?

rubocop是Ruby的代码样式检查器。 一个类似于rubocop的工具,Cane,可以与Rake集成 。 我更喜欢rubocop to Cane,因为rubocop根据Ruby Style Guide进行检查,它似乎发现了更多的问题 。 为了自动化样式检查过程,我想将rubocop与Rake集成,以便在缺少代码质量时构建失败。

Gem已经支持通过Rake向包添加测试 。 我想对样式检查做同样的事情,以便样式检查与测试一起运行。 我怎样才能做到这一点?

如果有一个Rake文件的帮助,这里有一个:

# -*- 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 

我建议炮轰rubocop程序。 这是最简单的解决方案。 只需将其添加到您的Rakefile:

 task test: :rubocop task :rubocop do sh 'rubocop' end 

从版本0.10.0 rubocop包含您可以使用的自定义rake任务。 只需将以下内容放入Rakefile

 require 'rubocop/rake_task' RuboCop::RakeTask.new 

确保使用大写的“R”和“C”,否则会出现NameError。

我强烈推荐,

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

这使用了rubocop自己的rake任务,并允许您根据需要传递选项。

如果您使用Guard进行RSpec测试,您可能会发现https://github.com/yujinakayama/guard-rubocop很有用。 它使Rubocop能够在您保存文件后立即为您提供即时反馈以及测试结果。

您可以使用您喜欢的选项通过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']