It is a RuboCop extension to define your cop with regexps.
Sometimes you need a custom cop to detect a problem. For example, if you need a cop to detect your internal library, RuboCop's core rules are not helpful. But creating a new cop is not easy enough if you are not familiar with RuboCop. You need to know AST, RuboCop's API, and so on.
In this case, rubocop-grep can be helpful. You can create a custom cop only with a Regular expression! If a regexp is enough to detect your problem, this gem can be the best way to solve the problem.
Install the gem and add to the application's Gemfile by executing:
$ bundle add rubocop-grep --require=false
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install rubocop-grep
First of all, you need to tell RuboCop to load this extension.
Put this into your .rubocop.yml
.
require: rubocop-grep
Alternatively, use the following array notation when specifying multiple extensions.
require:
- rubocop-other-extension
- rubocop-grep
Then, define your rule in .rubocop.yml
like the following.
Grep/Grep:
Rules:
# The simplest rule definition. It warns if the regexp matches your code.
- Pattern: '\bENV\b'
Message: Do not refer ENV directly.
# Pattern can be an array.
- Pattern:
- 'binding\.irb'
- 'binding\.pry'
Message: 'Debug code remains'
# The pattern matches code comments with `MatchInComment: true` option (default: false).
- Pattern: 'Rspec'
Message: 'Rspec is a typo of RSpec'
MatchInComment: true
There are some similar projects to solve similar problems. Probably you should use one of the similar projects instead of rubocop-grep.
You can simply use grep (1)
command, or git grep (1)
.
- Pros
- They are available in most environments.
- You can use them for non-Ruby files too.
- Cons
- They are not integrated with RuboCop.
- rubocop-grep is fully integrated with RuboCop. It means you can integrate this gem out-of-the-box with CI, editors, and so on.
- But you need to set up a workflow for
grep (1)
if you want to use it on CI.
- They do not have a configuration file.
- You can configure rubocop-grep with
.rubocop.yml
, but you cannot configure grep.
- You can configure rubocop-grep with
- They are not integrated with RuboCop.
If regexp is enough for your problem and you do not need RuboCop integration, grep (1)
is a good solution.
https://github.com/soutaro/querly
Querly is a gem to detect a problem by the original query language.
- Pros
- The query is more powerful than regexp.
- It is based on AST, so you can ignore whitespaces, the order of keyword arguments, and so on.
- The query is more powerful than regexp.
- Cons
- They are not integrated with RuboCop.
If you need more powerful queries and you do not need RuboCop integration, Querly is a good solution.
https://github.com/sider/goodcheck
Goodcheck is a linter based on Regexp.
- Pros
- It supports a tokenizer too.
- If you use a tokenizer, you don't need to care about whitespaces.
- You can use it for non-Ruby files too.
- It has a configuration file.
- It supports a tokenizer too.
- Cons
- They are not integrated with RuboCop.
If regexp is enough for your problem and you do not need RuboCop integration, Goodcheck is a good solution.
You can also create a custom cop by yourself to solve your problem.
- Pros
- Creating a custom cop is the most powerful approach in similar projects.
- It can find any problem that can be detected statically.
- Creating a custom cop is the most powerful approach in similar projects.
- Cons
- You need to know AST, RuboCop API, and so on.
If regexp is not enough for your problem and you are familiar with RuboCop, creating a custom cop is a good solution.
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and the created tag, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/pocke/rubocop-grep.