# Rubocop::Ruby20
See the intro [blog post](https://dev.to/pboling/rubocop-ruby-matrix-gems-nj)!
This gem requires no other gems. It depends on `rubocop`, but does not `require 'rubocop'`.
Awareness of `rubocop`'s lack of [SemVer][semver] adherence isn't evenly dispersed in the Ruby community.
The Rubocop team [has real reasons](https://github.com/semver/semver/issues/317)
for [not following SemVer](https://github.com/rubocop/rubocop/issues/4243), but if you've
found this project their reasons likely weigh less, in your context (e.g. running `rubocop` from command line), than
what brought you here.
The purpose of this gem is to constrain the `rubocop` dependency of a project in
a [SemVer compliant](https://semver.org/) (Semantic Versioning) way that aligns with the the desired minimum
compatible/supported Ruby version.
## Ruby Version Support Matrix
Adding this gem will facilitate the best practice of adding a `~> ` version constrained `rubocop` dependency, while
minimizing the risk of a rubocop minor / patch upgrade breaking the build. See the
official [compatibility matrix][rubocop-matrix] for `rubocop`.
`rubocop-ruby2_0` (this gem) will install on any version of Ruby >= 2.0, and can be used to analyze code intended to support Ruby >= 2.0.
* 🧊 - Install on Ruby ``
* 🏃 - Will Execute on Ruby ``
* 🪷 - Will not execute correctly on Ruby ``
* 🛠 - Lint code with Ruby `` syntax as the target
| gem | 1.8.7 | 1.9.3 | 2.0 | 2.1 | 2.2 | 2.3 | 2.4 | 2.5 | 2.6 | 2.7 | 3.0 | 3.1 | ruby-head | jruby-head |
|-------------------------|---------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|------------|
| [rubocop-ruby1_9][rr19] | [🛠][what1_8] | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 | 🧊 🪷 | 🧊 🪷 |
| [rubocop-ruby2_0][rr20] | | | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 | 🧊 🪷 | 🧊 🪷 |
| [rubocop-ruby2_1][rr21] | | | | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 | 🧊 🪷 | 🧊 🪷 |
| [rubocop-ruby2_2][rr22] | | | | | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 | 🧊 🪷 | 🧊 🪷 | 🧊 🪷 |
| [rubocop-ruby2_3][rr23] | | | | | | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 | 🧊 🪷 | 🧊 🪷 |
| [rubocop-ruby2_4][rr24] | | | | | | | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 | 🧊 🪷 | 🧊 🪷 |
| [rubocop-ruby2_5][rr25] | | | | | | | | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 |
| [rubocop-ruby2_6][rr26] | | | | | | | | 🛠 | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🪷 |
| [rubocop-ruby2_7][rr27] | | | | | | | | 🛠 | 🛠 | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 |
| [rubocop-ruby3_0][rr30] | | | | | | | | 🛠 | 🛠 | 🛠 | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 | 🧊 🏃 |
| [rubocop-ruby3_1][rr31] | | | | | | | | 🛠 | 🛠 | 🛠 | 🛠 | 🧊 🏃 🛠 | 🧊 🏃 | 🧊 🏃 |
[rr19]: https://github.com/rubocop-lts/rubocop-ruby1_9
[rr20]: https://github.com/rubocop-lts/rubocop-ruby2_0
[rr21]: https://github.com/rubocop-lts/rubocop-ruby2_1
[rr22]: https://github.com/rubocop-lts/rubocop-ruby2_2
[rr23]: https://github.com/rubocop-lts/rubocop-ruby2_3
[rr24]: https://github.com/rubocop-lts/rubocop-ruby2_4
[rr25]: https://github.com/rubocop-lts/rubocop-ruby2_5
[rr26]: https://github.com/rubocop-lts/rubocop-ruby2_6
[rr27]: https://github.com/rubocop-lts/rubocop-ruby2_7
[rr30]: https://github.com/rubocop-lts/rubocop-ruby3_0
[rr31]: https://github.com/rubocop-lts/rubocop-ruby3_1
[what1_8]: https://github.com/rubocop-lts/rubocop-ruby1_9#what-about-ruby-18
[rubocop-matrix]: https://github.com/rubocop/rubocop/blob/master/docs/modules/ROOT/pages/compatibility.adoc#support-matrix
## 🗿 Stable
All releases of this gem are stable releases. The first version is `1.0.0`.
## ✨ Installation
Without bundler execute:
$ gem install
Add this line to your application's Gemfile:
```ruby
gem 'rubocop-ruby2_0', '~> 1.0', require: false
```
And then execute:
$ bundle
Or install it yourself as:
$ gem install rubocop-ruby2_0
## 🔧 Usage
The following is optional. We'll discuss why you might want to do this after you see what it does.
Add to the top of your project's `.rubocop.yml` configuration file:
```yaml
inherit_gem:
rubocop-ruby2_0: rubocop.yml
```
This has the same effect as you declaring the following in your `.rubocop.yml`:
```yaml
AllCops:
# remove if already present in your `.rubocop.yml` to gain the full benefit of this gem!
TargetRubyVersion: 2.0
# The sibling gems for newer versions of Ruby support the NewCops directive as soon as RuboCop adds it.
# NewCops: enable
Style/BracesAroundHashParameters:
Enabled: true
EnforcedStyle: context_dependent
```
Let's talk about these settings.
## TargetRubyVersion
Allowing this gem to manage the target ruby version means you can switch to a different gem within the family when you upgrade to the next version of Ruby, and have nothing else to change. A single line in the `Gemfile`, and you are done.
## NewCops: enable
Commented out! Setting does not exist in very old versions of rubocop that works with Ruby < 2.4.
If you want to use this you'll have to upgrade to Ruby >= 2.4 and use the appropriate sibling gem, e.g. [`rubocop-ruby2_4`][2-4].
[2-4]: https://github.com/rubocop-lts/rubocop-ruby2_4
## Style/BracesAroundHashParameters
In an effort to help users of this gem prepare their code for more modern Rubies it has been enabled and configured with `coontext_dependent` as the closest parallel to what will work with Ruby 2.7+, and also retain compatibility with old Ruby.
See:
* https://github.com/rubocop/rubocop/issues/7641
* https://github.com/rubocop/rubocop/pull/7643
NOTE: This cop was removed from RuboCop as of 0.80.0, so if you are on modern RuboCop and reading this for some reason, you can't use it.
## Development
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](https://rubygems.org).
## ⚡️ Contributing
See [CONTRIBUTING.md][contributing]
## 🌈 Contributors
[![Contributors](https://contrib.rocks/image?repo=rubocop-lts/rubocop-ruby2_0)]("https://github.com/rubocop-lts/rubocop-ruby2_0/graphs/contributors")
Made with [contributors-img](https://contrib.rocks).
## 📄 License
The gem is available as open source under the terms of
the [MIT License][license] [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)][license-ref].
See [LICENSE][license] for the official [Copyright Notice][copyright-notice-explainer].
Project Logos (rubocop-ruby2_0)
See [docs/images/logo/README.txt][project-logos]
Organization Logo (rubocop-semver)
Author: [Yusuf Evli][org-logo-author]
Source: [Unsplash][org-logo-source]
License: [Unsplash License][org-logo-license]
[project-logos]: https://github.com/rubocop-lts/rubocop-ruby2_0/blob/main/docs/images/logo/README.txt
[org-logo-author]: https://unsplash.com/@yusufevli
[org-logo-source]: https://unsplash.com/photos/yaSLNLtKRIU
[org-logo-license]: https://unsplash.com/license
### © Copyright
* Copyright (c) 2022 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
[copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
## 🤝 Code of Conduct
Everyone interacting in the Rubocop::Ruby20 project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/rubocop-lts/rubocop-ruby2_0/blob/main/CODE_OF_CONDUCT.md).
## 📌 Versioning
This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations of this scheme should be reported as
bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be
immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new
major versions.
As a result of this policy, you can (and should) specify a dependency on this gem using
the [Pessimistic Version Constraint][pvc] with two digits of precision.
For example:
```ruby
spec.add_dependency "rubocop-ruby2_0", "~> 1.0"
```
[copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
[gh_discussions]: https://github.com/rubocop-lts/rubocop-ruby2_0/discussions
[conduct]: https://github.com/rubocop-lts/rubocop-ruby2_0/blob/main/CODE_OF_CONDUCT.md
[contributing]: https://github.com/rubocop-lts/rubocop-ruby2_0/blob/main/CONTRIBUTING.md
[security]: https://github.com/rubocop-lts/rubocop-ruby2_0/blob/main/SECURITY.md
[license]: https://github.com/rubocop-lts/rubocop-ruby2_0/blob/main/LICENSE.txt
[license-ref]: https://opensource.org/licenses/MIT
[semver]: http://semver.org/
[pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
[railsbling]: http://www.railsbling.com
[peterboling]: http://www.peterboling.com
[aboutme]: https://about.me/peter.boling
[angelme]: https://angel.co/peter-boling
[coderme]:http://coderwall.com/pboling
[followme-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
[tweetme]: http://twitter.com/galtzo
[politicme]: https://nationalprogressiveparty.org
[documentation]: https://rubydoc.info/github/rubocop-lts/rubocop-ruby2_0/main
[source]: https://github.com/rubocop-lts/rubocop-ruby2_0/
[actions]: https://github.com/rubocop-lts/rubocop-ruby2_0/actions
[issues]: https://github.com/rubocop-lts/rubocop-ruby2_0/issues
[climate_maintainability]: https://codeclimate.com/github/rubocop-lts/rubocop-ruby2_0/maintainability
[code_triage]: https://www.codetriage.com/rubocop-lts/rubocop-ruby2_0
[blogpage]: http://www.railsbling.com/tags/rubocop-ruby2_0/
[rubygems]: https://rubygems.org/gems/rubocop-ruby2_0
[chat]: https://gitter.im/rubocop-lts/rubocop-ruby2_0?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[maintenancee_policy]: https://guides.rubyonrails.org/maintenance_policy.html#security-issues
[liberapay_donate]: https://liberapay.com/pboling/donate
[gh_sponsors]: https://github.com/sponsors/pboling