如何将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']