/guard-rubocop

Guard plugin for RuboCop

Primary LanguageRubyMIT LicenseMIT

Gem Version Dependency Status Build Status Coverage Status Code Climate

guard-rubocop

guard-rubocop allows you to automatically check Ruby code style with RuboCop when files are modified.

Tested on MRI 2.2, 2.3, 2.4 and JRuby 9000.

Installation

Please make sure to have Guard installed before continue.

Add guard-rubocop to your Gemfile:

group :development do
  gem 'guard-rubocop'
end

and then execute:

$ bundle install

or install it yourself as:

$ gem install guard-rubocop

Add the default Guard::RuboCop definition to your Guardfile by running:

$ guard init rubocop

Usage

Please read the Guard usage documentation.

Options

You can pass some options in Guardfile like the following example:

guard :rubocop, all_on_start: false, cli: ['--format', 'clang', '--rails'] do
  # ...
end

Available Options

all_on_start: true     # Check all files at Guard startup.
                       #   default: true
cli: '--rails'         # Pass arbitrary RuboCop CLI arguments.
                       # An array or string is acceptable.
                       #   default: nil
hide_stdout: false     # Do not display console output (in case outputting to file).
                       #   default: false
keep_failed: true      # Keep failed files until they pass.
                       #   default: true
notification: :failed  # Display Growl notification after each run.
                       #   true    - Always notify
                       #   false   - Never notify
                       #   :failed - Notify only when failed
                       #   default: :failed
launchy: nil           # Filename to launch using Launchy after RuboCop runs.
                       #   default: nil

Using Launchy to view results

guard-rubocop can be configured to launch a results file in lieu of or in addition to outputing results to the terminal. Configure your Guardfile with the launchy option:

guard :rubocop, cli: %w(--format fuubar --format html -o ./tmp/rubocop_results.html), launchy: './tmp/rubocop_results.html' do
  # ...
end

Advanced Tips

If you're using a testing Guard plugin such as guard-rspec together with guard-rubocop in the TDD way (the red-green-refactor cycle), you might be uncomfortable with the offense reports from RuboCop in the red-green phase:

  • In the red-green phase, you're not necessarily required to write clean code – you just focus writing code to pass the test. It means, in this phase, guard-rspec should be run but guard-rubocop should not.
  • In the refactor phase, you're required to make the code clean while keeping the test passing. In this phase, both guard-rspec and guard-rubocop should be run.

In this case, you may think the following Guardfile structure useful:

# This group allows to skip running RuboCop when RSpec failed.
group :red_green_refactor, halt_on_fail: true do
  guard :rspec do
    # ...
  end

  guard :rubocop do
    # ...
  end
end

Note: You need to use guard-rspec 4.2.3 or later due to a bug where it unintentionally fails when there are no spec files to be run.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

Copyright (c) 2013–2014 Yuji Nakayama

See the LICENSE.txt for details.