2013-02-21 16 views
19

rubocop è un controllo di stile di codice per Ruby. Uno strumento simile a rubocop, Cane, può essere integrated with Rake. Preferisco rubocop a Cane poiché rubocop fa i controlli in base allo Ruby Style Guide e sembra che sia spot more problems. Per automatizzare il processo di controllo dello stile vorrei integrare rubocop con Rake in modo che la compilazione fallisca se manca la qualità del codice.Come integrare rubocop con Rake?

La gemma supporta già adding tests in pacchetti tramite Rake. Mi piacerebbe fare lo stesso con i controlli di stile in modo che i controlli di stile vengano eseguiti insieme ai test. Come posso fare questo?

Se aiuta a iniziare con un Rakefile qui è uno:

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

risposta

0

Suggerirei sborsare al programma rubocop. È la soluzione più semplice. Basta aggiungere questo alla tua Rakefile:

task test: :rubocop 

task :rubocop do 
    sh 'rubocop' 
end 
+3

La soluzione seguente è probabilmente migliore - utilizzando 'RuboCop :: RakeTask' –

2

Probabilmente troverete https://github.com/yujinakayama/guard-rubocop utile se si utilizza Guard per i test RSpec. Permette a Rubocop di darti un feedback immediato non appena salvi il file, insieme ai risultati del test.

54

A partire dalla versione 0.10.0 rubocop contiene un'attività rake personalizzata che è possibile utilizzare. Basta mettere il seguente nella vostra Rakefile

require 'rubocop/rake_task' 

RuboCop::RakeTask.new 

assicurarsi di utilizzare maiuscole 'R' e 'C' o si otterrà un NameError.

-2

È possibile sborsare tramite Rake con le opzioni che preferisci:

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

Ho poi consiglia di modificare l'attività predefinita di includere l'output. Il trucco è cancellare l'attività e quindi aggiungere di nuovo quello che vuoi. Notare la necessità di terminare con || true in modo che un errore da Rubocop non impedisca l'esecuzione dell'attività successiva. Ecco quello che faccio, che utilizza anche test paralleli:

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

mi raccomando,

require 'rubocop/rake_task' 

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

Questo utilizza propri compiti rake del rubocop e ti permette di passare le opzioni, se volete.