2013-02-21 11 views
19

rubocop to narzędzie do sprawdzania stylu kodu w języku Ruby. Podobnym narzędziem do Rubocop, Cane, może być integrated with Rake. Wolę rubocop od Cane'a, ponieważ Rubocop dokonuje testów na podstawie Ruby Style Guide i wydaje się, że jest to spot more problems. Aby zautomatyzować proces sprawdzania stylu, chciałbym zintegrować Rubocop z Rake, aby kompilacja zakończyła się niepowodzeniem, jeśli brakuje jakości kodu.Jak zintegrować rubocop z prowizją?

Klej już obsługuje adding tests do pakietów za pomocą prowizji. Chciałbym zrobić to samo z kontrolą stylu, aby kontrole stylu były przeprowadzane razem z testami. Jak mogę to zrobić?

Jeśli to pomaga zacząć Rakefile Oto jeden:

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

Odpowiedz

0

Polecam łuskanie obecnie do programu rubocop. To najprostsze rozwiązanie. Wystarczy dodać do swojej Rakefile:

task test: :rubocop 

task :rubocop do 
    sh 'rubocop' 
end 
+3

Poniższe rozwiązanie jest prawdopodobnie lepsze - użycie 'RuboCop :: RakeTask' –

2

Prawdopodobnie okaże https://github.com/yujinakayama/guard-rubocop przydatna, jeśli używasz Straż dla testów RSpec. Umożliwia on firmie Rubocop natychmiastową informację zwrotną natychmiast po zapisaniu pliku wraz z wynikami testu.

54

Od wersji 0.10.0 rubocop zawiera niestandardowe zlecenie rake, z którego można korzystać. Wystarczy umieścić następujące w Rakefile

require 'rubocop/rake_task' 

RuboCop::RakeTask.new 

Należy używać dużych liter „R” i „C” lub dostaniesz NameError.

-2

Możesz zapłacić poprzez Rake z opcjami które preferują:

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

Następnie zaleca modyfikowania zadanie domyślne włączenie wyjścia. Sztuką jest wyczyścić zadanie, a następnie dodać z powrotem, co chcesz. Zauważ, że musisz zakończyć na || true, aby błąd z Rubocop nie uniemożliwił uruchomienia następnego zadania. Oto, co robię, który również wykorzystuje testy równoległe:

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

Gorąco polecam,

require 'rubocop/rake_task' 

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

ta wykorzystuje własne zadania grabić rubocop i pozwala przekazać opcje, jeśli chcesz.