This is one of the Vox Pupuli meta gems. It provides a convenient way to
configure RuboCop. RuboCop is the de facto standard Ruby
Linter and Formatter. voxpupuli-rubocop
depends on the correct RuboCop version
- dependencies that we want to use in our CI pipelines. There is also a rubocop.yml that configures RuboCop. and preconfigured rake tasks.
The goal of this gem is to provide a central configuration for RuboCop that's used in all Vox Pupuli gems.
In your Gemfile, add the following:
gem 'voxpupuli-rubocop', '~> 2.1.0'
We suggest to pin the minor version like above, because new minor versions will pull in newer rubocop versions
(A best practice, that we also follow in our Vox Pupuli Ruby Gems, is to pin
like above and use dependabot. It will provide pull requests that allow
newer minor versions. And in a CI pipeline you will see if the newer rubocop
works without issues. That prevents your HEAD branch from breaking. If you've
multiple repositories in your GitHub Org, you can filter for all dependabot PRs
by checking for label:ruby label:dependencies
Vox Pupuli example).
In your Rakefile, include our Rake task:
require 'voxpupuli/rubocop/rake'
Now you can list your rake tasks and should see three new ones:
bundle exec rake -T
rake rubocop # Run RuboCop
rake rubocop:autocorrect # Autocorrect RuboCop offenses (only when it's safe)
rake rubocop:autocorrect_all # Autocorrect RuboCop offenses (safe and unsafe)
To use our default config, create a .rubocop.yml
:
---
inherit_gem:
voxpupuli-rubocop: rubocop.yml
You maybe see a bunch of violations with the new configuration. A common path forward is to accept them but prevent future/more violations. You can generate a "RuboCop ToDo file", which is basically an allow-list of all current violations:
bundle exec rubocop --regenerate-todo
As described above, we will do new minor releases of voxpupuli-rubocop with newer RuboCop dependencies. We also ship a rubocop.yml that people can use. This file currently configures Ruby 2.7 as a target version. This will be adjusted in major releases.
User of voxpupuli-rubocop don't have to use our rubocop.yml, they can just rely on our curated list of rubocop dependencies. Or overwrite the target version in their own rubocop.yaml:
inherit_gem:
voxpupuli-rubocop: rubocop.yml
AllCops:
TargetRubyVersion: '3.3'