Keeping your Ruby Style Consistent with Rubocop

I like coding style guides. Having a consistent style removes that little bit of friction that writing code in multiple styles creates. This article is a quick tutorial on how to get Rubocop - a static code analyzer for Ruby - up and running.

Installation in a Rails project

group :development do
  gem "rubocop", require: false
end

Running Rubocop

To get a sense of the style violations in your project, simply run the 'rubocop' command from the command line.

  > rubocop

You might have an overwhelming number of violations, especially if bringing Rubocop into an existing project. Rubocop has a really nice feature that allows you to acknowledge the violations, but push them off into their own file to tackle at a later time. To invoke this feature, run Rubocop with the --auto-gen-flag to create the .rubocop_todo.yml

  > rubocop --auto-gen-config

The rubocop_todo.yml creates a list of all of your violations. You can then reference this file from your .rubocop.yml settings file, wiping the slate clean, ignoring violations for the time being.

inherit_from:
  - .rubocop_todo.yml

Then, simply remove a single rule from .rubocop_todo.yml, rerun the 'rubocop' command (without the --auto-gen-flag), and fix the presented violation. Rinse and repeat until you have a clean project.

If you find that you disagree with a given rule, you can override the rule in your .rubocop.yml file. Let's say that I like double quotes better than single quotes. Simply add:

Style/StringLiterals:
  EnforcedStyle: double_quotes
  SupportedStyles:
    - single_quotes
    - double_quotes

It can be a little tricky to identify which violation comes from which rule, but a little bit of searching through the .rubocop_todo.yml should do the trick. I think it would be nice to have a table of Rubocop violation messages along with the rule that presents the message, to help pair the two.

That is it, simple and effective!


Written by Alex Brinkman who lives and works in Denver, but plays in the mountains.