Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何将rubocop与Rake集成?_Ruby_Coding Style_Rake - Fatal编程技术网

Ruby 如何将rubocop与Rake集成?

Ruby 如何将rubocop与Rake集成?,ruby,coding-style,rake,Ruby,Coding Style,Rake,是Ruby的代码样式检查器。可以使用与rubocop类似的工具Cane。我更喜欢rubocop而不是Cane,因为rubocop是根据。为了自动化样式检查过程,我想将rubocop与Rake集成,以便在缺乏代码质量时构建失败 Gem已经支持通过Rake访问包。我希望对样式检查也这样做,以便样式检查与测试一起运行。我该怎么做 如果从耙铲开始有帮助,这里有一个: # -*- coding: utf-8; mode: ruby -*- require 'bundler/gem_tasks' requ

是Ruby的代码样式检查器。可以使用与rubocop类似的工具Cane。我更喜欢rubocop而不是Cane,因为rubocop是根据。为了自动化样式检查过程,我想将rubocop与Rake集成,以便在缺乏代码质量时构建失败

Gem已经支持通过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
#-*-编码:utf-8;模式:ruby-*-
需要“bundler/gem_任务”
需要“rake/testtask”
Rake::TestTask.new do|t|

t、 libs我建议向rubocop项目投资。这是最简单的解决办法。只需将此添加到您的Rakefile:

task test: :rubocop

task :rubocop do
  sh 'rubocop'
end

如果在RSpec测试中使用Guard,您可能会发现它很有用。它使Rubocop能够在您保存文件以及测试结果时立即向您提供反馈。

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

require 'rubocop/rake_task'

RuboCop::RakeTask.new

确保使用大写字母“R”和“C”,否则会出现名称错误。

您可以通过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']
我极力推荐,

require 'rubocop/rake_task'

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

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

我自己也需要做一些类似的事情,最后在这里查看了
rubocp::RakeTask的内部源代码:

要求“rubocop”
cli=cli.new
如果冗长,则放入“Running RuboCop…”
结果=cli.run(选项)
如果result.non为零,则中止('RuboCop failed!')&&错误时失败
实际上,您可以在自己的代码库/rake任务中直接调用类似的代码

最后,我编写了一个可以调用的小包装器模块,带有一些我一直希望应用的默认标志:

模块RubocopCli
def self.run!(*args)
需要“rubocop”
cli=RuboCop::cli.new
结果=cli.run([“--显示cop名称”、“--强制排除”、“--失败级别”、“自动更正”、*参数])
如果result.non为零,则引发“rubocopli.run!Linting失败”?
结束
结束
然后,您可以使用任何任务或应用程序代码中的其他参数调用它,如:

文件到文件lint=%w[lib/whatever.rb spec/lib/whatever\u spec.rb]
鲁博科普克利,快跑!(“--自动更正”、*文件到文件)

下面的解决方案可能更好-使用
RuboCop::RakeTask
可以在