rubocop-lts 6.3.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -1,221 +1,338 @@
1
- <a href="https://rubocop-lts.gitlab.io/"><img alt="rubocop-lts Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/rubocop-lts/avatar-192px.svg" width="20%" align="right"/></a>
2
-
3
- # 🦾 RuboCop LTS
4
-
5
- The RuboCop LTS family of gems is the distillation of more than 20 years of my own Ruby expertise and source code diving, built on the shoulders of the expertise of many others — `rubocop`, `standard`, `rubocop-gradual` and others are runtime dependencies — not reinventing any wheels here); organizing that expertise into per-Ruby-version sets of configurations. Yes, I typed those emdashes, and wrote this entire README myself without AI — `ctrl`-`shift`-`u`-`2014`.
6
-
7
- ## PROJECT DOCUMENTATION
8
-
9
- * 🌱 [Convention > Configuration][Convention-Over-Configuration]
10
- * 🌱 [Releases][Even-Major-Release]
11
- * 🌱 [How to Upgrade Ruby (1.8 to 3.2)!][How-To-Upgrade-Ruby]
12
- * 👩‍💻 [Org Health][OrgHealth]
13
- * ✨ [Installation][Installation]
14
- * 🔧 [Usage][Usage]
15
- * ⚡️ [Contributing][Contributing]
16
- * 🌈 [Contributors][Contributors]
17
- * 📄 [License][License]
18
- * © [Copyright][Copyright]
19
- * 🤝 [Code of Conduct][Code of Conduct]
20
- * 📌 [Versioning][Versioning]
21
-
22
- [Convention-Over-Configuration]: https://rubocop-lts.gitlab.io/CONV_OVER_CONF/
23
- [Even-Major-Release]: https://rubocop-lts.gitlab.io/CONV_OVER_CONF/#even-major-release
24
- [How-To-Upgrade-Ruby]: https://rubocop-lts.gitlab.io/HOW_TO_UPGRADE_RUBY/
25
- [OrgHealth]: https://rubocop-lts.gitlab.io/#org-health-
26
- [Installation]: https://rubocop-lts.gitlab.io/#installation-
27
- [Usage]: https://rubocop-lts.gitlab.io/#usage-
28
- [Contributing]: https://rubocop-lts.gitlab.io/#contributing-
29
- [Contributors]: https://rubocop-lts.gitlab.io/#contributors-
30
- [License]: https://rubocop-lts.gitlab.io/#license-
31
- [Copyright]: https://rubocop-lts.gitlab.io/#copyright-
32
- [Code of Conduct]: https://rubocop-lts.gitlab.io/#code-of-conduct-
33
- [Versioning]: https://rubocop-lts.gitlab.io/#versioning-
34
-
35
- ## This README
36
-
37
- * 🌳 [This Branch](#this-branch-)
38
- * ‍💻 [Project Health](#project-health-)
39
- * ✨ [Installation](#installation-)
40
-
41
- ## This Branch 🌳
1
+ <p align="center">
2
+ <a href="https://rubocop.org#gh-light-mode-only" target="_blank" rel="noopener">
3
+ <img height="120px" src="https://github.com/rubocop-lts/rubocop-lts/raw/main/docs/images/logo/rubocop-light.svg?raw=true" alt="SVG RuboCop Logo, Copyright (c) 2014 Dimiter Petrov, CC BY-NC 4.0, see docs/images/logo/README.txt">
4
+ </a>
5
+ <a href="https://rubocop.org#gh-dark-mode-only" target="_blank" rel="noopener">
6
+ <img height="120px" src="https://github.com/rubocop-lts/rubocop-lts/raw/main/docs/images/logo/rubocop-dark.svg?raw=true" alt="SVG RuboCop Logo, Copyright (c) 2014 Dimiter Petrov, CC BY-NC 4.0, see docs/images/logo/README.txt">
7
+ </a>
8
+ <a href="https://www.ruby-lang.org/" target="_blank" rel="noopener">
9
+ <img height="120px" src="https://github.com/rubocop-lts/rubocop-lts/raw/main/docs/images/logo/ruby-logo.svg?raw=true" alt="Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5, see docs/images/logo/README.txt">
10
+ </a>
11
+ <a href="https://semver.org/#gh-light-mode-only" target="_blank" rel="noopener">
12
+ <img height="120px" src="https://github.com/rubocop-lts/rubocop-lts/raw/main/docs/images/logo/semver-light.svg?raw=true" alt="SemVer.org Logo by @maxhaz, see docs/images/logo/README.txt">
13
+ </a>
14
+ <a href="https://semver.org/#gh-dark-mode-only" target="_blank" rel="noopener">
15
+ <img height="120px" src="https://github.com/rubocop-lts/rubocop-lts/raw/main/docs/images/logo/semver-dark.svg?raw=true" alt="SemVer.org Logo by @maxhaz, see docs/images/logo/README.txt">
16
+ </a>
17
+ </p>
18
+
19
+ # Rubocop LTS
20
+
21
+ ## 🙋‍♀️ How often has RuboCop broken your build?
22
+
23
+ This is both good (literally its job) _and_ bad (when it's for the wrong reasons).
24
+
25
+ It's supposed to break the build when it finds violations.
26
+ It should not break the build due to incompatibility with your environment. RuboCop
27
+ doesn't [follow SemVer](https://dev.to/pboling/rubocop-ruby-matrix-gems-nj), and occasionally it will unexpectedly break things.
28
+
29
+ ## 🗿 Stable
30
+
31
+ All releases are stable releases. The major version you need depends on the supported version(s) of Ruby for your project.
32
+
33
+ Projects that support a single version of Ruby (like many closed-source applications) will use the [Odd releases][even-release].
34
+
35
+ Projects that support multiple versions of Ruby simultaneously (like many open-source applications and libraries) will use the [Even releases][even-release].
42
36
 
43
37
  <!-- FIND VERSION -->
44
- **This README is for the even release of `rubocop-lts` supporting Ruby >= 2.1.**
38
+ **This README is for the odd release of `rubocop-lts` supporting Ruby ~> 2.2.0.**
45
39
 
46
- This gem configures many gems for you:
40
+ [odd-release]: https://github.com/rubocop-lts/rubocop-lts#odd-major-release
41
+ [even-release]: https://github.com/rubocop-lts/rubocop-lts#even-major-release
47
42
 
48
- - rubocop
49
- - rubocop-gradual
50
- - rubocop-md
51
- - rubocop-rake
52
- - rubocop-shopify
53
- - rubocop-thread_safety
54
- - standard
55
- - standard-performance (incl. rubocop-performance)
56
- - standard-custom
57
- - standard-rubocop-lts (ruby version-specific rules)
43
+ ## Version Conventions
58
44
 
59
- And optionally, if you are using RSpec:
45
+ ### Odd Major Release
60
46
 
61
- - rubocop-lts-rspec (which loads `rubocop-rspec`, `rubocop-rspec-extra`, `rubocop-env`, and `rubocop-factory_bot`)
47
+ Versions like:
48
+ ```ruby
49
+ "1.0.0"
50
+ "3.0.0"
51
+ "5.0.0"
52
+ # ... etc
53
+ ```
54
+ Locked to a single minor version of Ruby, e.g. version 15.0 has a `required_ruby_version` of `['>= 2.6.0', '< 2.7']`, which will install only on `2.6.x` versions of Ruby.
62
55
 
63
- And optionally, if you are building a RubyGem:
56
+ #### Implementation
64
57
 
65
- - rubocop-packaging
58
+ Intended for applications and libraries that only lint against a single Ruby version.
66
59
 
67
- And optionally, if you are building a Rails app:
60
+ Odd versions should be attached to a project's trunk (e.g. the main branch), for long-term stability (ahem, _lts_, anyone?) of the style rules.
68
61
 
69
- - standard-rails (incl. rubocop-rails)
70
- - betterlint
62
+ | Your Ruby | Your Gemfile | Your Gemfile.lock | Your .rubocop.yml |
63
+ |-----------------------------------|--------------------------------|-------------------|------------------------------------------------|
64
+ | `1.9.x` (`['>= 1.9.0', '< 2']`) | `gem "rubocop-lts", "~> 1.0"` | `rubocop-ruby1_9` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
65
+ | `2.0.x` (`['>= 2.0.0', '< 2.1']`) | `gem "rubocop-lts", "~> 3.0"` | `rubocop-ruby2_0` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
66
+ | `2.1.x` (`['>= 2.1.0', '< 2.2']`) | `gem "rubocop-lts", "~> 5.0"` | `rubocop-ruby2_1` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
67
+ | `2.2.x` (`['>= 2.2.0', '< 2.3']`) | `gem "rubocop-lts", "~> 7.0"` | `rubocop-ruby2_2` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
68
+ | `2.3.x` (`['>= 2.3.0', '< 2.4']`) | `gem "rubocop-lts", "~> 9.0"` | `rubocop-ruby2_3` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
69
+ | `2.4.x` (`['>= 2.4.0', '< 2.5']`) | `gem "rubocop-lts", "~> 11.0"` | `rubocop-ruby2_4` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
70
+ | `2.5.x` (`['>= 2.5.0', '< 2.6']`) | `gem "rubocop-lts", "~> 13.0"` | `rubocop-ruby2_5` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
71
+ | `2.6.x` (`['>= 2.6.0', '< 2.7']`) | `gem "rubocop-lts", "~> 15.0"` | `rubocop-ruby2_6` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
72
+ | `2.7.x` (`['>= 2.7.0', '< 3.0']`) | `gem "rubocop-lts", "~> 17.0"` | `rubocop-ruby2_7` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
73
+ | `3.0.x` (`['>= 3.0.0', '< 3.1']`) | `gem "rubocop-lts", "~> 19.0"` | `rubocop-ruby3_0` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
74
+ | `3.1.x` (`['>= 3.1.0', '< 3.2']`) | `gem "rubocop-lts", "~> 21.0"` | `rubocop-ruby3_1` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
75
+ | `3.2.x` / ruby-head | `gem "rubocop-lts", "~> 23.0"` | `rubocop-ruby3_2` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
71
76
 
72
- ## Project Health 👩‍💻
77
+ ### Even Major Release
73
78
 
74
- | Gem Name | Version | Downloads | CI | Activity |
75
- |------------------------------|-------------------------------------|----------------------------------------------------------------------|-----------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
76
- | [`rubocop-lts`][⛳️lts-gh] | [![Gem Version][⛳️lts-vi]][⛳️lts-g] | [![Total DL][🖇️lts-dti]][⛳️lts-g] [![DL Rank][🏘️lts-rti]][⛳️lts-g] | [![Current][🚎lts-cwfi]][🚎lts-cwf] [![Heads][🖐lts-hwfi]][🖐lts-hwf] | [![Open Issues][📗lts-ioi]][📗lts-io] [![Closed Issues][🚀lts-ici]][🚀lts-ic] [![Open PRs][💄lts-poi]][💄lts-po] [![Closed PRs][👽lts-pci]][👽lts-pc] |
77
- | [`rubocop-ruby1_8`][⛳️18-gh] | [![Gem Version][⛳️18-vi]][⛳️18-g] | [![Total DL][🖇️18-dti]][⛳️18-g] [![DL Rank][🏘️18-rti]][⛳️18-g] | [![Current][🚎18-cwfi]][🚎18-cwf] [![Heads][🖐18-hwfi]][🖐18-hwf] | [![Open Issues][📗18-ioi]][📗18-io] [![Closed Issues][🚀18-ici]][🚀18-ic] [![Open PRs][💄18-poi]][💄18-po] [![Closed PRs][👽18-pci]][👽18-pc] |
78
- | [`rubocop-ruby1_9`][⛳️19-gh] | [![Gem Version][⛳️19-vi]][⛳️19-g] | [![Total DL][🖇️19-dti]][⛳️19-g] [![DL Rank][🏘️19-rti]][⛳️19-g] | [![Current][🚎19-cwfi]][🚎19-cwf] [![Heads][🖐19-hwfi]][🖐19-hwf] | [![Open Issues][📗19-ioi]][📗19-io] [![Closed Issues][🚀19-ici]][🚀19-ic] [![Open PRs][💄19-poi]][💄19-po] [![Closed PRs][👽19-pci]][👽19-pc] |
79
- | [`rubocop-ruby2_0`][⛳️20-gh] | [![Gem Version][⛳️20-vi]][⛳️20-g] | [![Total DL][🖇️20-dti]][⛳️20-g] [![DL Rank][🏘️20-rti]][⛳️20-g] | [![Current][🚎20-cwfi]][🚎20-cwf] [![Heads][🖐20-hwfi]][🖐20-hwf] | [![Open Issues][📗20-ioi]][📗20-io] [![Closed Issues][🚀20-ici]][🚀20-ic] [![Open PRs][💄20-poi]][💄20-po] [![Closed PRs][👽20-pci]][👽20-pc] |
80
- | [`rubocop-ruby2_1`][⛳️21-gh] | [![Gem Version][⛳️21-vi]][⛳️21-g] | [![Total DL][🖇️21-dti]][⛳️21-g] [![DL Rank][🏘️21-rti]][⛳️21-g] | [![Current][🚎21-cwfi]][🚎21-cwf] [![Heads][🖐21-hwfi]][🖐21-hwf] | [![Open Issues][📗21-ioi]][📗21-io] [![Closed Issues][🚀21-ici]][🚀21-ic] [![Open PRs][💄21-poi]][💄21-po] [![Closed PRs][👽21-pci]][👽21-pc] |
81
- | [`rubocop-ruby2_2`][⛳️22-gh] | [![Gem Version][⛳️22-vi]][⛳️22-g] | [![Total DL][🖇️22-dti]][⛳️22-g] [![DL Rank][🏘️22-rti]][⛳️22-g] | [![Current][🚎22-cwfi]][🚎22-cwf] [![Heads][🖐22-hwfi]][🖐22-hwf] | [![Open Issues][📗22-ioi]][📗22-io] [![Closed Issues][🚀22-ici]][🚀22-ic] [![Open PRs][💄22-poi]][💄22-po] [![Closed PRs][👽22-pci]][👽22-pc] |
82
- | [`rubocop-ruby2_3`][⛳️23-gh] | [![Gem Version][⛳️23-vi]][⛳️23-g] | [![Total DL][🖇️23-dti]][⛳️23-g] [![DL Rank][🏘️23-rti]][⛳️23-g] | [![Current][🚎23-cwfi]][🚎23-cwf] [![Heads][🖐23-hwfi]][🖐23-hwf] | [![Open Issues][📗23-ioi]][📗23-io] [![Closed Issues][🚀23-ici]][🚀23-ic] [![Open PRs][💄23-poi]][💄23-po] [![Closed PRs][👽23-pci]][👽23-pc] |
83
- | [`rubocop-ruby2_4`][⛳️24-gh] | [![Gem Version][⛳️24-vi]][⛳️24-g] | [![Total DL][🖇️24-dti]][⛳️24-g] [![DL Rank][🏘️24-rti]][⛳️24-g] | [![Current][🚎24-cwfi]][🚎24-cwf] [![Heads][🖐24-hwfi]][🖐24-hwf] | [![Open Issues][📗24-ioi]][📗24-io] [![Closed Issues][🚀24-ici]][🚀24-ic] [![Open PRs][💄24-poi]][💄24-po] [![Closed PRs][👽24-pci]][👽24-pc] |
84
- | [`rubocop-ruby2_5`][⛳️25-gh] | [![Gem Version][⛳️25-vi]][⛳️25-g] | [![Total DL][🖇️25-dti]][⛳️25-g] [![DL Rank][🏘️25-rti]][⛳️25-g] | [![Current][🚎25-cwfi]][🚎25-cwf] [![Heads][🖐25-hwfi]][🖐25-hwf] | [![Open Issues][📗25-ioi]][📗25-io] [![Closed Issues][🚀25-ici]][🚀25-ic] [![Open PRs][💄25-poi]][💄25-po] [![Closed PRs][👽25-pci]][👽25-pc] |
85
- | [`rubocop-ruby2_6`][⛳️26-gh] | [![Gem Version][⛳️26-vi]][⛳️26-g] | [![Total DL][🖇️26-dti]][⛳️26-g] [![DL Rank][🏘️26-rti]][⛳️26-g] | [![Current][🚎26-cwfi]][🚎26-cwf] [![Heads][🖐26-hwfi]][🖐26-hwf] | [![Open Issues][📗26-ioi]][📗26-io] [![Closed Issues][🚀26-ici]][🚀26-ic] [![Open PRs][💄26-poi]][💄26-po] [![Closed PRs][👽26-pci]][👽26-pc] |
86
- | [`rubocop-ruby2_7`][⛳️27-gh] | [![Gem Version][⛳️27-vi]][⛳️27-g] | [![Total DL][🖇️27-dti]][⛳️27-g] [![DL Rank][🏘️27-rti]][⛳️27-g] | [![Current][🚎27-cwfi]][🚎27-cwf] [![Heads][🖐27-hwfi]][🖐27-hwf] | [![Open Issues][📗27-ioi]][📗27-io] [![Closed Issues][🚀27-ici]][🚀27-ic] [![Open PRs][💄27-poi]][💄27-po] [![Closed PRs][👽27-pci]][👽27-pc] |
87
- | [`rubocop-ruby3_0`][⛳️30-gh] | [![Gem Version][⛳️30-vi]][⛳️30-g] | [![Total DL][🖇️30-dti]][⛳️30-g] [![DL Rank][🏘️30-rti]][⛳️30-g] | [![Current][🚎30-cwfi]][🚎30-cwf] [![Heads][🖐30-hwfi]][🖐30-hwf] | [![Open Issues][📗30-ioi]][📗30-io] [![Closed Issues][🚀30-ici]][🚀30-ic] [![Open PRs][💄30-poi]][💄30-po] [![Closed PRs][👽30-pci]][👽30-pc] |
88
- | [`rubocop-ruby3_1`][⛳️31-gh] | [![Gem Version][⛳️31-vi]][⛳️31-g] | [![Total DL][🖇️31-dti]][⛳️31-g] [![DL Rank][🏘️31-rti]][⛳️31-g] | [![Current][🚎31-cwfi]][🚎31-cwf] [![Heads][🖐31-hwfi]][🖐31-hwf] | [![Open Issues][📗31-ioi]][📗31-io] [![Closed Issues][🚀31-ici]][🚀31-ic] [![Open PRs][💄31-poi]][💄31-po] [![Closed PRs][👽31-pci]][👽31-pc] |
89
- | [`rubocop-ruby3_2`][⛳️32-gh] | [![Gem Version][⛳️32-vi]][⛳️32-g] | [![Total DL][🖇️32-dti]][⛳️32-g] [![DL Rank][🏘️32-rti]][⛳️32-g] | [![Current][🚎32-cwfi]][🚎32-cwf] [![Heads][🖐32-hwfi]][🖐32-hwf] | [![Open Issues][📗32-ioi]][📗32-io] [![Closed Issues][🚀32-ici]][🚀32-ic] [![Open PRs][💄32-poi]][💄32-po] [![Closed PRs][👽32-pci]][👽32-pc] |
79
+ Versions like:
80
+ ```ruby
81
+ "2.0.0"
82
+ "4.0.0"
83
+ "6.0.0"
84
+ # ... etc
85
+ ```
86
+ Locked to the forward range of Rubies on which the gem can be installed (though rubocop may not execute on all),
87
+ e.g. version 16.0 has a `required_ruby_version` of `['>= 2.6.0', '< 3.2']` will install on any released version
88
+ of ruby from `2.6` on.
89
+
90
+ #### Implementation
91
+
92
+ Intended for applications and libraries that lint against a range of Ruby versions.
93
+
94
+ Even versions will help projects upgrade to newer Rubies while keeping the same underlying version of Rubocop version, so change can be introduced one step at a time.
95
+
96
+ | Minimum Ruby | Your Gemfile | Your Gemfile.lock | Your .rubocop.yml |
97
+ |-----------------------------------|--------------------------------|-------------------|------------------------------------------------|
98
+ | `1.9.x` (`['>= 1.9.0', '< 3.2']`) | `gem "rubocop-lts", "~> 2.0"` | `rubocop-ruby1_9` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
99
+ | `2.0.x` (`['>= 2.0.0', '< 3.2']`) | `gem "rubocop-lts", "~> 4.0"` | `rubocop-ruby2_0` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
100
+ | `2.1.x` (`['>= 2.1.0', '< 3.2']`) | `gem "rubocop-lts", "~> 6.0"` | `rubocop-ruby2_1` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
101
+ | `2.2.x` (`['>= 2.2.0', '< 3.2']`) | `gem "rubocop-lts", "~> 8.0"` | `rubocop-ruby2_2` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
102
+ | `2.3.x` (`['>= 2.3.0', '< 3.2']`) | `gem "rubocop-lts", "~> 10.0"` | `rubocop-ruby2_3` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
103
+ | `2.4.x` (`['>= 2.4.0', '< 3.2']`) | `gem "rubocop-lts", "~> 12.0"` | `rubocop-ruby2_4` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
104
+ | `2.5.x` (`['>= 2.5.0', '< 3.2']`) | `gem "rubocop-lts", "~> 14.0"` | `rubocop-ruby2_5` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
105
+ | `2.6.x` (`['>= 2.6.0', '< 3.2']`) | `gem "rubocop-lts", "~> 16.0"` | `rubocop-ruby2_6` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
106
+ | `2.7.x` (`['>= 2.7.0', '< 3.2']`) | `gem "rubocop-lts", "~> 18.0"` | `rubocop-ruby2_7` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
107
+ | `3.0.x` (`['>= 3.0.0', '< 3.2']`) | `gem "rubocop-lts", "~> 20.0"` | `rubocop-ruby3_0` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
108
+ | `3.1.x` (`['>= 3.1.0', '< 3.2']`) | `gem "rubocop-lts", "~> 22.0"` | `rubocop-ruby3_1` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
109
+ | `3.2.x` / ruby-head | `gem "rubocop-lts", "~> 24.0"` | `rubocop-ruby3_2` | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
110
+
111
+ ### All together now!
112
+
113
+ Upgrading a single step from odd to even will allow upgrading Ruby.
114
+
115
+ Upgrading a single step from even to odd will keep the same version of Ruby, and instead upgrade to the next RuboCop milestone.
116
+
117
+ Each major version will have a tracking branch named accordingly, [for development](https://github.com/rubocop-lts/rubocop-lts#git-branch-names).
118
+
119
+ ### 🪢 How To Untie Gorgon's Knot
120
+
121
+ > NOTE: The ruby specific versions, e.g. `rubocop-ruby2_7`, can be used if you won't be upgrading ruby. Keep scrolling down for links to each of them.
122
+
123
+ How to upgrade a project from yesterday, to today.
124
+
125
+ 1. Have good code coverage.
126
+ 2. Upgrade one step at a time.
127
+ 3. Re-run `bundle exec rubocop -a` in between each step.
128
+ 4. Re-run `bundle exec rubocop --auto-gen-config` in between each step.
129
+ 5. Commit and push to CI in between each step.
130
+
131
+ | Your Ruby | Your Gemfile | required_ruby_version | Your Gemfile.lock | Your .rubocop.yml |
132
+ |---------------|--------------------------------------|-------------------------|------------------------------|------------------------------------------------|
133
+ | `1.9.x` | `gem "rubocop-lts", "~> 1.0"` | `['>= 1.9.0', '< 2']` | [`rubocop-ruby1_9`][⛳️19-gh] | `inherit_gem:\n rubocop-lts: rubocop-lts.yml` |
134
+ | ⬆️ to `2.0.x` | ⬆️ to `gem "rubocop-lts", "~> 2.0"` | `['>= 1.9.0', '< 3.2']` | no change | no change |
135
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 3.0"` | `['>= 2.0.0', '< 2.1']` | [`rubocop-ruby2_0`][⛳️20-gh] | no change |
136
+ | ⬆️ to `2.1.x` | ⬆️ to `gem "rubocop-lts", "~> 4.0"` | `['>= 2.0.0', '< 3.2']` | no change | no change |
137
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 5.0"` | `['>= 2.1.0', '< 2.2']` | [`rubocop-ruby2_1`][⛳️21-gh] | no change |
138
+ | ⬆️ to `2.2.x` | ⬆️ to `gem "rubocop-lts", "~> 6.0"` | `['>= 2.1.0', '< 3.2']` | no change | no change |
139
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 7.0"` | `['>= 2.2.0', '< 2.3']` | [`rubocop-ruby2_2`][⛳️22-gh] | no change |
140
+ | ⬆️ to `2.3.x` | ⬆️ to `gem "rubocop-lts", "~> 8.0"` | `['>= 2.2.0', '< 3.2']` | no change | no change |
141
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 9.0"` | `['>= 2.3.0', '< 2.4']` | [`rubocop-ruby2_3`][⛳️23-gh] | no change |
142
+ | ⬆️ to `2.4.x` | ⬆️ to `gem "rubocop-lts", "~> 10.0"` | `['>= 2.3.0', '< 3.2']` | no change | no change |
143
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 11.0"` | `['>= 2.4.0', '< 2.5']` | [`rubocop-ruby2_4`][⛳️24-gh] | no change |
144
+ | ⬆️ to `2.5.x` | ⬆️ to `gem "rubocop-lts", "~> 12.0"` | `['>= 2.4.0', '< 3.2']` | no change | no change |
145
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 13.0"` | `['>= 2.5.0', '< 2.6']` | [`rubocop-ruby2_5`][⛳️25-gh] | no change |
146
+ | ⬆️ to `2.6.x` | ⬆️ to `gem "rubocop-lts", "~> 14.0"` | `['>= 2.5.0', '< 3.2']` | no change | no change |
147
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 15.0"` | `['>= 2.6.0', '< 2.7']` | [`rubocop-ruby2_6`][⛳️26-gh] | no change |
148
+ | ⬆️ to `2.7.x` | ⬆️ to `gem "rubocop-lts", "~> 16.0"` | `['>= 2.6.0', '< 3.2']` | no change | no change |
149
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 17.0"` | `['>= 2.7.0', '< 3.0']` | [`rubocop-ruby2_7`][⛳️27-gh] | no change |
150
+ | ⬆️ to `3.0.x` | ⬆️ to `gem "rubocop-lts", "~> 18.0"` | `['>= 2.7.0', '< 3.2']` | no change | no change |
151
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 19.0"` | `['>= 3.0.0', '< 3.1']` | [`rubocop-ruby3_0`][⛳️30-gh] | no change |
152
+ | ⬆️ to `3.1.x` | ⬆️ to `gem "rubocop-lts", "~> 20.0"` | `['>= 3.0.0', '< 3.2']` | no change | no change |
153
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 21.0"` | `['>= 3.1.0', '< 3.2']` | [`rubocop-ruby3_1`][⛳️31-gh] | no change |
154
+ | ⬆️ to `3.2.x` | ⬆️ to `gem "rubocop-lts", "~> 22.0"` | `['>= 3.1.0', '< 3.2']` | no change | no change |
155
+ | no change | ⬆️ to `gem "rubocop-lts", "~> 23.0"` | `['>= 3.2.0', '< 3.3']` | [`rubocop-ruby3_2`][⛳️32-gh] | no change |
156
+ | ⬆️ to `3.3.x` | ⬆️ to `gem "rubocop-lts", "~> 24.0"` | `['>= 3.2.0', '< 3.3']` | no change | no change |
157
+
158
+ > NOTE: `required_ruby_version` means the gem will install on a version of Ruby within the range.
159
+ > Versions of this gem intended for ancient Rubies may not execute on more modern Rubies, _despite installing_.
160
+ > As such you might consider limiting linting to only a single version of Ruby, the oldest one supported.
161
+ > Speaking of old rubies... 👇
162
+
163
+ ### 📼 Supporting Ruby 1.8
164
+
165
+ Have a library still supporting Ruby 1.8.7, or looking to drop support for Ruby 1.8.7 in a SemVer-compliant manner?
166
+
167
+ Simply use `rubocop-lts`, version 1.x or 2.x, which support Ruby 1.9.3 for installation, and 1.8.7 for syntax.
168
+ ```yaml
169
+ inherit_gem:
170
+ rubocop-lts: rubocop-lts1_8.yml
171
+ ```
90
172
 
91
- ## Installation
173
+ > NOTE: For more on how Ruby 1.8 support works, look [here][what1_8]
92
174
 
93
- Install the gem and add to the application's Gemfile by executing:
175
+ [what1_8]: https://github.com/rubocop-lts/rubocop-ruby1_9#what-about-ruby-18
94
176
 
95
- $ bundle add rubocop-lts -r false
177
+ ## 👩‍💻 Project Health
96
178
 
97
- NOTE: If you are using **Rails** remove the `-r false`,
98
- so the Railtie will load and rake tasks will be loaded automatically.
179
+ | Gem Name | Version | Downloads | CI | Activity |
180
+ |------------------------------|-------------------------------------|----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
181
+ | [`rubocop-lts`][⛳️lts-gh] | [![Gem Version][⛳️lts-vi]][⛳️lts-g] | [![Total DL][🖇️lts-dti]][⛳️lts-g] [![DL Rank][🏘️lts-rti]][⛳️lts-g] | [![Current][🚎lts-cwfi]][🚎lts-cwf] [![Legacy][🧮lts-lwfi]][🧮lts-lwf] [![Heads][🖐lts-hwfi]][🖐lts-hwf] | [![Open Issues][📗lts-ioi]][📗lts-io] [![Closed Issues][🚀lts-ici]][🚀lts-ic] [![Open PRs][💄lts-poi]][💄lts-po] [![Closed PRs][👽lts-pci]][👽lts-pc] |
182
+ | [`rubocop-ruby1_9`][⛳️19-gh] | [![Gem Version][⛳️19-vi]][⛳️19-g] | [![Total DL][🖇️19-dti]][⛳️19-g] [![DL Rank][🏘️19-rti]][⛳️19-g] | [![Current][🚎19-cwfi]][🚎19-cwf] [![Legacy][🧮19-lwfi]][🧮19-lwf] | [![Open Issues][📗19-ioi]][📗19-io] [![Closed Issues][🚀19-ici]][🚀19-ic] [![Open PRs][💄19-poi]][💄19-po] [![Closed PRs][👽19-pci]][👽19-pc] |
183
+ | [`rubocop-ruby2_0`][⛳️20-gh] | [![Gem Version][⛳️20-vi]][⛳️20-g] | [![Total DL][🖇️20-dti]][⛳️20-g] [![DL Rank][🏘️20-rti]][⛳️20-g] | [![Current][🚎20-cwfi]][🚎20-cwf] [![Legacy][🧮20-lwfi]][🧮20-lwf] | [![Open Issues][📗20-ioi]][📗20-io] [![Closed Issues][🚀20-ici]][🚀20-ic] [![Open PRs][💄20-poi]][💄20-po] [![Closed PRs][👽20-pci]][👽20-pc] |
184
+ | [`rubocop-ruby2_1`][⛳️21-gh] | [![Gem Version][⛳️21-vi]][⛳️21-g] | [![Total DL][🖇️21-dti]][⛳️21-g] [![DL Rank][🏘️21-rti]][⛳️21-g] | [![Current][🚎21-cwfi]][🚎21-cwf] [![Legacy][🧮21-lwfi]][🧮21-lwf] | [![Open Issues][📗21-ioi]][📗21-io] [![Closed Issues][🚀21-ici]][🚀21-ic] [![Open PRs][💄21-poi]][💄21-po] [![Closed PRs][👽21-pci]][👽21-pc] |
185
+ | [`rubocop-ruby2_2`][⛳️22-gh] | [![Gem Version][⛳️22-vi]][⛳️22-g] | [![Total DL][🖇️22-dti]][⛳️22-g] [![DL Rank][🏘️22-rti]][⛳️22-g] | [![Current][🚎22-cwfi]][🚎22-cwf] [![Legacy][🧮22-lwfi]][🧮22-lwf] | [![Open Issues][📗22-ioi]][📗22-io] [![Closed Issues][🚀22-ici]][🚀22-ic] [![Open PRs][💄22-poi]][💄22-po] [![Closed PRs][👽22-pci]][👽22-pc] |
186
+ | [`rubocop-ruby2_3`][⛳️23-gh] | [![Gem Version][⛳️23-vi]][⛳️23-g] | [![Total DL][🖇️23-dti]][⛳️23-g] [![DL Rank][🏘️23-rti]][⛳️23-g] | [![Current][🚎23-cwfi]][🚎23-cwf] [![Legacy][🧮23-lwfi]][🧮23-lwf] | [![Open Issues][📗23-ioi]][📗23-io] [![Closed Issues][🚀23-ici]][🚀23-ic] [![Open PRs][💄23-poi]][💄23-po] [![Closed PRs][👽23-pci]][👽23-pc] |
187
+ | [`rubocop-ruby2_4`][⛳️24-gh] | [![Gem Version][⛳️24-vi]][⛳️24-g] | [![Total DL][🖇️24-dti]][⛳️24-g] [![DL Rank][🏘️24-rti]][⛳️24-g] | [![Current][🚎24-cwfi]][🚎24-cwf] [![Legacy][🧮24-lwfi]][🧮24-lwf] | [![Open Issues][📗24-ioi]][📗24-io] [![Closed Issues][🚀24-ici]][🚀24-ic] [![Open PRs][💄24-poi]][💄24-po] [![Closed PRs][👽24-pci]][👽24-pc] |
188
+ | [`rubocop-ruby2_5`][⛳️25-gh] | [![Gem Version][⛳️25-vi]][⛳️25-g] | [![Total DL][🖇️25-dti]][⛳️25-g] [![DL Rank][🏘️25-rti]][⛳️25-g] | [![Current][🚎25-cwfi]][🚎25-cwf] [![Heads][🖐25-hwfi]][🖐25-hwf] [![Legacy][🧮25-lwfi]][🧮25-lwf] | [![Open Issues][📗25-ioi]][📗25-io] [![Closed Issues][🚀25-ici]][🚀25-ic] [![Open PRs][💄25-poi]][💄25-po] [![Closed PRs][👽25-pci]][👽25-pc] |
189
+ | [`rubocop-ruby2_6`][⛳️26-gh] | [![Gem Version][⛳️26-vi]][⛳️26-g] | [![Total DL][🖇️26-dti]][⛳️26-g] [![DL Rank][🏘️26-rti]][⛳️26-g] | [![Current][🚎26-cwfi]][🚎26-cwf] [![Heads][🖐26-hwfi]][🖐26-hwf] [![Legacy][🧮26-lwfi]][🧮26-lwf] | [![Open Issues][📗26-ioi]][📗26-io] [![Closed Issues][🚀26-ici]][🚀26-ic] [![Open PRs][💄26-poi]][💄26-po] [![Closed PRs][👽26-pci]][👽26-pc] |
190
+ | [`rubocop-ruby2_7`][⛳️27-gh] | [![Gem Version][⛳️27-vi]][⛳️27-g] | [![Total DL][🖇️27-dti]][⛳️27-g] [![DL Rank][🏘️27-rti]][⛳️27-g] | [![Current][🚎27-cwfi]][🚎27-cwf] [![Heads][🖐27-hwfi]][🖐27-hwf] | [![Open Issues][📗27-ioi]][📗27-io] [![Closed Issues][🚀27-ici]][🚀27-ic] [![Open PRs][💄27-poi]][💄27-po] [![Closed PRs][👽27-pci]][👽27-pc] |
191
+ | [`rubocop-ruby3_0`][⛳️30-gh] | [![Gem Version][⛳️30-vi]][⛳️30-g] | [![Total DL][🖇️30-dti]][⛳️30-g] [![DL Rank][🏘️30-rti]][⛳️30-g] | [![Current][🚎30-cwfi]][🚎30-cwf] [![Heads][🖐30-hwfi]][🖐30-hwf] | [![Open Issues][📗30-ioi]][📗30-io] [![Closed Issues][🚀30-ici]][🚀30-ic] [![Open PRs][💄30-poi]][💄30-po] [![Closed PRs][👽30-pci]][👽30-pc] |
192
+ | [`rubocop-ruby3_1`][⛳️31-gh] | [![Gem Version][⛳️31-vi]][⛳️31-g] | [![Total DL][🖇️31-dti]][⛳️31-g] [![DL Rank][🏘️31-rti]][⛳️31-g] | [![Current][🚎31-cwfi]][🚎31-cwf] [![Heads][🖐31-hwfi]][🖐31-hwf] | [![Open Issues][📗31-ioi]][📗31-io] [![Closed Issues][🚀31-ici]][🚀31-ic] [![Open PRs][💄31-poi]][💄31-po] [![Closed PRs][👽31-pci]][👽31-pc] |
193
+ | [`rubocop-ruby3_2`][⛳️32-gh] | [![Gem Version][⛳️32-vi]][⛳️32-g] | [![Total DL][🖇️32-dti]][⛳️32-g] [![DL Rank][🏘️32-rti]][⛳️32-g] | [![Current][🚎32-cwfi]][🚎32-cwf] [![Heads][🖐32-hwfi]][🖐32-hwf] | [![Open Issues][📗32-ioi]][📗32-io] [![Closed Issues][🚀32-ici]][🚀32-ic] [![Open PRs][💄32-poi]][💄32-po] [![Closed PRs][👽32-pci]][👽32-pc] |
99
194
 
100
- If bundler is not being used to manage dependencies, install the gem by executing:
195
+ ## Installation
101
196
 
102
- $ gem install rubocop-lts
197
+ Without bundler execute:
103
198
 
104
- Or add this line to your application's Gemfile:
199
+ $ gem install
200
+
201
+ Add this line to your application's Gemfile:
105
202
 
106
203
  <!-- FIND VERSION -->
107
204
  ```ruby
108
- gem "rubocop-lts", "~> 6.1", require: false
205
+ gem 'rubocop-lts', '~> 7.0', require: false
109
206
  ```
110
207
 
111
208
  And then execute:
112
209
 
113
210
  $ bundle
114
211
 
115
- ## Usage with RuboCop
212
+ ## 🔧 Usage
213
+
214
+ The following is optional. We'll discuss why you might want to do this after you see what it does.
116
215
 
117
- In your `.rubocop.yml` do the following:
216
+ Add to the top of your project's `.rubocop.yml` configuration file:
118
217
 
119
- 🔥 Delete the following line 🔥
120
218
  ```yaml
121
- inherit_from: .rubocop_todo.yml
219
+ inherit_gem:
220
+ - rubocop-lts.yml
122
221
  ```
123
222
 
124
- You can probably 🔥 delete 🔥 most of the other lines too.
125
- This tool is anti-bike-shedding.
126
- You no longer need to worry about the rules!
223
+ ## Development
127
224
 
128
- 🔥 Any of the following configs are no longer needed 🔥
129
- ```yaml
130
- require:
131
- - 'betterlint'
132
- - 'rubocop-md'
133
- - 'rubocop-packaging'
134
- - 'rubocop-performance'
135
- - 'rubocop-rake'
136
- - 'rubocop-rspec'
137
- - 'rubocop-rails'
138
- - 'rubocop-thread_safety'
139
- - 'rubocop/gradual/patch'
140
- - 'standard'
141
- - 'standard-custom'
142
- - 'standard-performance'
143
- - 'standard-rails'
144
- - 'standard-rubocop-lts'
145
-
146
- AllCops:
147
- NewCops: enable
148
- DisplayCopNames: true
149
- TargetRubyVersion: X.X
150
- ```
225
+ 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.
151
226
 
152
- Then pick one of the following to add!
227
+ 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).
153
228
 
154
- ### if Ruby with RSpec
229
+ ### Git Branch Names
155
230
 
156
- ```yaml
157
- inherit_gem:
158
- rubocop-lts: rubocop-lts.yml # for the ruby + rspec
159
- # NOTE: this is the default, and as such, is equivalent to:
160
- # rubocop-lts: config/ruby_rspec.yml
231
+ #### Naming Scheme
232
+
233
+ ```ruby
234
+ "r{{ ruby major }}_{{ ruby minor }}-{{ parity }}-v{{ gem-version }}"
161
235
  ```
162
236
 
163
- ### if just Ruby (without RSpec)
237
+ ##### Parity
164
238
 
165
- ```yaml
166
- inherit_gem:
167
- rubocop-lts: config/ruby.yml
168
- ```
239
+ Even versions use the token `even` in the branch name.
240
+ Odd versions use the token `odd` in the branch name.
169
241
 
170
- ### if Rails with RSpec
242
+ #### Version - Branch Matrix
171
243
 
172
- ```yaml
173
- inherit_gem:
174
- rubocop-lts: config/rails_rspec.yml
175
- ```
244
+ | Ruby Version | Parity | Gem Version | Branch Name | Purpose |
245
+ |-----------------|--------|-------------|-----------------|-----------------------------------|
246
+ | 1.9 | odd | 1.x | `r1_9-odd-v1` | LTS, trunk, single-ruby-linting |
247
+ | 1.9 | even | 2.x | `r1_9-even-v2` | Upgrade, feat, multi-ruby-linting |
248
+ | 2.0 | odd | 3.x | `r2_0-odd-v3` | LTS, trunk, single-ruby-linting |
249
+ | 2.0 | even | 4.x | `r2_0-even-v4` | Upgrade, feat, multi-ruby-linting |
250
+ | 2.1 | odd | 5.x | `r2_1-odd-v5` | LTS, trunk, single-ruby-linting |
251
+ | 2.1 | even | 6.x | `r2_1-even-v6` | Upgrade, feat, multi-ruby-linting |
252
+ | 2.2 | odd | 7.x | `r2_2-odd-v7` | LTS, trunk, single-ruby-linting |
253
+ | 2.2 | even | 8.x | `r2_2-even-v8` | Upgrade, feat, multi-ruby-linting |
254
+ | 2.3 | odd | 9.x | `r2_3-odd-v9` | LTS, trunk, single-ruby-linting |
255
+ | 2.3 | even | 10.x | `r2_3-even-v10` | Upgrade, feat, multi-ruby-linting |
256
+ | 2.4 | odd | 11.x | `r2_4-odd-v11` | LTS, trunk, single-ruby-linting |
257
+ | 2.4 | even | 12.x | `r2_4-even-v12` | Upgrade, feat, multi-ruby-linting |
258
+ | 2.5 | odd | 13.x | `r2_5-odd-v13` | LTS, trunk, single-ruby-linting |
259
+ | 2.5 | even | 14.x | `r2_5-even-v14` | Upgrade, feat, multi-ruby-linting |
260
+ | 2.6 | odd | 15.x | `r2_6-odd-v15` | LTS, trunk, single-ruby-linting |
261
+ | 2.6 | even | 16.x | `r2_6-even-v16` | Upgrade, feat, multi-ruby-linting |
262
+ | 2.7 | odd | 17.x | `r2_7-odd-v17` | LTS, trunk, single-ruby-linting |
263
+ | 2.7 | even | 18.x | `r2_7-even-v18` | Upgrade, feat, multi-ruby-linting |
264
+ | 3.0 | odd | 19.x | `r3_0-odd-v19` | LTS, trunk, single-ruby-linting |
265
+ | 3.0 | even | 20.x | `r3_0-even-v20` | Upgrade, feat, multi-ruby-linting |
266
+ | 3.1 | odd | 21.x | `r3_1-odd-v21` | LTS, trunk, single-ruby-linting |
267
+ | 3.1 | even | 22.x | `r3_1-even-v22` | Upgrade, feat, multi-ruby-linting |
268
+ | 3.2 / ruby-head | odd | 23.x | `r3_2-odd-v23` | LTS, trunk, single-ruby-linting |
269
+ | 3.2 / ruby-head | even | 24.x | `r3_2-even-v24` | Upgrade, feat, multi-ruby-linting |
176
270
 
177
- ### if just Rails (without RSpec)
271
+ > NOTE: For more on how Ruby 1.8 support works, see [above][lts1_8]
178
272
 
179
- ```yaml
180
- inherit_gem:
181
- rubocop-lts: config/rails.yml
182
- ```
273
+ [lts1_8]: https://github.com/rubocop-lts/rubocop-lts#supporting-ruby-18
183
274
 
184
- ### if rubygem with RSpec
275
+ ## ⚡️ Contributing
185
276
 
186
- ```yaml
187
- inherit_gem:
188
- rubocop-lts: config/rubygem_rspec.yml
189
- ```
277
+ See [CONTRIBUTING.md][contributing]
190
278
 
191
- ### if just rubygem (without RSpec)
279
+ ## 🌈 Contributors
192
280
 
193
- ```yaml
194
- inherit_gem:
195
- rubocop-lts: config/rubygem.yml
196
- ```
281
+ [![Contributors](https://contrib.rocks/image?repo=rubocop-lts/rubocop-lts)]("https://github.com/rubocop-lts/rubocop-lts/graphs/contributors")
197
282
 
198
- ### Load Rake Tasks
283
+ Made with [contributors-img](https://contrib.rocks).
199
284
 
200
- NOTE: On Rails it is **automatic**, via Railtie, so you can skip this.
285
+ ## 📄 License
201
286
 
202
- In a non-Rails environment add the following to your `Rakefile`:
203
- ```ruby
204
- require "rubocop/lts"
205
- Rubocop::Lts.install_tasks
206
- ```
287
+ The gem is available as open source under the terms of
288
+ the [MIT License][license] [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)][license-ref].
289
+ See [LICENSE][license] for the official [Copyright Notice][copyright-notice-explainer].
207
290
 
208
- This will load the `rubocop_gradual` rake task, and alias it as `rubocop`.
291
+ <details>
292
+ <summary>Project Logos (rubocop-lts)</summary>
209
293
 
210
- ### Dependabot Noise Reduction
294
+ See [docs/images/logo/README.txt][project-logos]
295
+ </details>
211
296
 
212
- Add the following to `.github/dependabot.yml` if you use Github Actions.
297
+ <details>
298
+ <summary>Organization Logo (rubocop-semver)</summary>
213
299
 
214
- ```yaml
215
- ignore:
216
- - dependency-name: "rubocop-lts"
300
+ Author: [Yusuf Evli][org-logo-author]
301
+ Source: [Unsplash][org-logo-source]
302
+ License: [Unsplash License][org-logo-license]
303
+ </details>
304
+
305
+ [project-logos]: https://github.com/rubocop-lts/rubocop-lts/blob/main/docs/images/logo/README.txt
306
+ [org-logo-author]: https://unsplash.com/@yusufevli
307
+ [org-logo-source]: https://unsplash.com/photos/yaSLNLtKRIU
308
+ [org-logo-license]: https://unsplash.com/license
309
+
310
+ ### © Copyright
311
+
312
+ * Copyright (c) 2022 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
313
+
314
+ ## 🤝 Code of Conduct
315
+
316
+ Everyone interacting in Rubocop LTS codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/rubocop-lts/rubocop-lts/blob/main/CODE_OF_CONDUCT.md).
317
+
318
+ ## 📌 Versioning
319
+
320
+ This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations of this scheme should be reported as
321
+ bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be
322
+ immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new
323
+ major versions.
324
+
325
+ As a result of this policy, you can (and should) specify a dependency on this gem using
326
+ the [Pessimistic Version Constraint][pvc] with two digits of precision.
327
+
328
+ For example:
329
+
330
+ <!-- FIND VERSION -->
331
+ ```ruby
332
+ spec.add_dependency "rubocop-lts", "~> 7.0"
217
333
  ```
218
334
 
335
+
219
336
  <!-- columnar badge #s for Project Health table:
220
337
  ⛳️
221
338
  🖇
@@ -236,6 +353,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
236
353
  [🚎lts-cwfi]: https://github.com/rubocop-lts/rubocop-lts/actions/workflows/current.yml/badge.svg
237
354
  [🖐lts-hwf]: https://github.com/rubocop-lts/rubocop-lts/actions/workflows/heads.yml
238
355
  [🖐lts-hwfi]: https://github.com/rubocop-lts/rubocop-lts/actions/workflows/heads.yml/badge.svg
356
+ [🧮lts-lwf]: https://github.com/rubocop-lts/rubocop-lts/actions/workflows/legacy.yml
357
+ [🧮lts-lwfi]: https://github.com/rubocop-lts/rubocop-lts/actions/workflows/legacy.yml/badge.svg
239
358
  [📗lts-io]: https://github.com/rubocop-lts/rubocop-lts/issues
240
359
  [📗lts-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-lts
241
360
  [🚀lts-ic]: https://github.com/rubocop-lts/rubocop-lts/issues?q=is%3Aissue+is%3Aclosed
@@ -246,23 +365,6 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
246
365
  [👽lts-pci]: https://img.shields.io/github/issues-pr-closed/rubocop-lts/rubocop-lts
247
366
  [⛳️lts-g]: https://rubygems.org/gems/rubocop-lts
248
367
  [⛳️lts-gh]: https://github.com/rubocop-lts/rubocop-lts
249
- [⛳️18-vi]: http://img.shields.io/gem/v/rubocop-ruby1_8.svg
250
- [🖇️18-dti]: https://img.shields.io/gem/dt/rubocop-ruby1_8.svg
251
- [🏘️18-rti]: https://img.shields.io/gem/rt/rubocop-ruby1_8.svg
252
- [🚎18-cwf]: https://github.com/rubocop-lts/rubocop-ruby1_8/actions/workflows/current.yml
253
- [🚎18-cwfi]: https://github.com/rubocop-lts/rubocop-ruby1_8/actions/workflows/current.yml/badge.svg
254
- [🖐18-hwf]: https://github.com/rubocop-lts/rubocop-ruby1_8/actions/workflows/heads.yml
255
- [🖐18-hwfi]: https://github.com/rubocop-lts/rubocop-ruby1_8/actions/workflows/heads.yml/badge.svg
256
- [📗18-io]: https://github.com/rubocop-lts/rubocop-ruby1_8/issues
257
- [📗18-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby1_8
258
- [🚀18-ic]: https://github.com/rubocop-lts/rubocop-ruby1_8/issues?q=is%3Aissue+is%3Aclosed
259
- [🚀18-ici]: https://img.shields.io/github/issues-closed-raw/rubocop-lts/rubocop-ruby1_8
260
- [💄18-po]: https://github.com/rubocop-lts/rubocop-ruby1_8/pulls
261
- [💄18-poi]: https://img.shields.io/github/issues-pr/rubocop-lts/rubocop-ruby1_8
262
- [👽18-pc]: https://github.com/rubocop-lts/rubocop-ruby1_8/pulls?q=is%3Apr+is%3Aclosed
263
- [👽18-pci]: https://img.shields.io/github/issues-pr-closed/rubocop-lts/rubocop-ruby1_8
264
- [⛳️18-g]: https://rubygems.org/gems/rubocop-ruby1_8
265
- [⛳️18-gh]: https://github.com/rubocop-lts/rubocop-ruby1_8
266
368
  [⛳️19-vi]: http://img.shields.io/gem/v/rubocop-ruby1_9.svg
267
369
  [🖇️19-dti]: https://img.shields.io/gem/dt/rubocop-ruby1_9.svg
268
370
  [🏘️19-rti]: https://img.shields.io/gem/rt/rubocop-ruby1_9.svg
@@ -270,6 +372,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
270
372
  [🚎19-cwfi]: https://github.com/rubocop-lts/rubocop-ruby1_9/actions/workflows/current.yml/badge.svg
271
373
  [🖐19-hwf]: https://github.com/rubocop-lts/rubocop-ruby1_9/actions/workflows/heads.yml
272
374
  [🖐19-hwfi]: https://github.com/rubocop-lts/rubocop-ruby1_9/actions/workflows/heads.yml/badge.svg
375
+ [🧮19-lwf]: https://github.com/rubocop-lts/rubocop-ruby1_9/actions/workflows/legacy.yml
376
+ [🧮19-lwfi]: https://github.com/rubocop-lts/rubocop-ruby1_9/actions/workflows/legacy.yml/badge.svg
273
377
  [📗19-io]: https://github.com/rubocop-lts/rubocop-ruby1_9/issues
274
378
  [📗19-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby1_9
275
379
  [🚀19-ic]: https://github.com/rubocop-lts/rubocop-ruby1_9/issues?q=is%3Aissue+is%3Aclosed
@@ -287,6 +391,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
287
391
  [🚎20-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_0/actions/workflows/current.yml/badge.svg
288
392
  [🖐20-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_0/actions/workflows/heads.yml
289
393
  [🖐20-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_0/actions/workflows/heads.yml/badge.svg
394
+ [🧮20-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_0/actions/workflows/legacy.yml
395
+ [🧮20-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_0/actions/workflows/legacy.yml/badge.svg
290
396
  [📗20-io]: https://github.com/rubocop-lts/rubocop-ruby2_0/issues
291
397
  [📗20-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_0
292
398
  [🚀20-ic]: https://github.com/rubocop-lts/rubocop-ruby2_0/issues?q=is%3Aissue+is%3Aclosed
@@ -304,6 +410,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
304
410
  [🚎21-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_1/actions/workflows/current.yml/badge.svg
305
411
  [🖐21-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_1/actions/workflows/heads.yml
306
412
  [🖐21-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_1/actions/workflows/heads.yml/badge.svg
413
+ [🧮21-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_1/actions/workflows/legacy.yml
414
+ [🧮21-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_1/actions/workflows/legacy.yml/badge.svg
307
415
  [📗21-io]: https://github.com/rubocop-lts/rubocop-ruby2_1/issues
308
416
  [📗21-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_1
309
417
  [🚀21-ic]: https://github.com/rubocop-lts/rubocop-ruby2_1/issues?q=is%3Aissue+is%3Aclosed
@@ -321,6 +429,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
321
429
  [🚎22-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_2/actions/workflows/current.yml/badge.svg
322
430
  [🖐22-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_2/actions/workflows/heads.yml
323
431
  [🖐22-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_2/actions/workflows/heads.yml/badge.svg
432
+ [🧮22-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_2/actions/workflows/legacy.yml
433
+ [🧮22-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_2/actions/workflows/legacy.yml/badge.svg
324
434
  [📗22-io]: https://github.com/rubocop-lts/rubocop-ruby2_2/issues
325
435
  [📗22-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_2
326
436
  [🚀22-ic]: https://github.com/rubocop-lts/rubocop-ruby2_2/issues?q=is%3Aissue+is%3Aclosed
@@ -338,6 +448,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
338
448
  [🚎23-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_3/actions/workflows/current.yml/badge.svg
339
449
  [🖐23-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_3/actions/workflows/heads.yml
340
450
  [🖐23-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_3/actions/workflows/heads.yml/badge.svg
451
+ [🧮23-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_3/actions/workflows/legacy.yml
452
+ [🧮23-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_3/actions/workflows/legacy.yml/badge.svg
341
453
  [📗23-io]: https://github.com/rubocop-lts/rubocop-ruby2_3/issues
342
454
  [📗23-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_3
343
455
  [🚀23-ic]: https://github.com/rubocop-lts/rubocop-ruby2_3/issues?q=is%3Aissue+is%3Aclosed
@@ -355,6 +467,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
355
467
  [🚎24-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_4/actions/workflows/current.yml/badge.svg
356
468
  [🖐24-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_4/actions/workflows/heads.yml
357
469
  [🖐24-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_4/actions/workflows/heads.yml/badge.svg
470
+ [🧮24-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_4/actions/workflows/legacy.yml
471
+ [🧮24-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_4/actions/workflows/legacy.yml/badge.svg
358
472
  [📗24-io]: https://github.com/rubocop-lts/rubocop-ruby2_4/issues
359
473
  [📗24-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_4
360
474
  [🚀24-ic]: https://github.com/rubocop-lts/rubocop-ruby2_4/issues?q=is%3Aissue+is%3Aclosed
@@ -372,6 +486,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
372
486
  [🚎25-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_5/actions/workflows/current.yml/badge.svg
373
487
  [🖐25-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_5/actions/workflows/heads.yml
374
488
  [🖐25-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_5/actions/workflows/heads.yml/badge.svg
489
+ [🧮25-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_5/actions/workflows/legacy.yml
490
+ [🧮25-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_5/actions/workflows/legacy.yml/badge.svg
375
491
  [📗25-io]: https://github.com/rubocop-lts/rubocop-ruby2_5/issues
376
492
  [📗25-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_5
377
493
  [🚀25-ic]: https://github.com/rubocop-lts/rubocop-ruby2_5/issues?q=is%3Aissue+is%3Aclosed
@@ -389,6 +505,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
389
505
  [🚎26-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_6/actions/workflows/current.yml/badge.svg
390
506
  [🖐26-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_6/actions/workflows/heads.yml
391
507
  [🖐26-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_6/actions/workflows/heads.yml/badge.svg
508
+ [🧮26-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_6/actions/workflows/legacy.yml
509
+ [🧮26-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_6/actions/workflows/legacy.yml/badge.svg
392
510
  [📗26-io]: https://github.com/rubocop-lts/rubocop-ruby2_6/issues
393
511
  [📗26-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_6
394
512
  [🚀26-ic]: https://github.com/rubocop-lts/rubocop-ruby2_6/issues?q=is%3Aissue+is%3Aclosed
@@ -406,6 +524,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
406
524
  [🚎27-cwfi]: https://github.com/rubocop-lts/rubocop-ruby2_7/actions/workflows/current.yml/badge.svg
407
525
  [🖐27-hwf]: https://github.com/rubocop-lts/rubocop-ruby2_7/actions/workflows/heads.yml
408
526
  [🖐27-hwfi]: https://github.com/rubocop-lts/rubocop-ruby2_7/actions/workflows/heads.yml/badge.svg
527
+ [🧮27-lwf]: https://github.com/rubocop-lts/rubocop-ruby2_7/actions/workflows/legacy.yml
528
+ [🧮27-lwfi]: https://github.com/rubocop-lts/rubocop-ruby2_7/actions/workflows/legacy.yml/badge.svg
409
529
  [📗27-io]: https://github.com/rubocop-lts/rubocop-ruby2_7/issues
410
530
  [📗27-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby2_7
411
531
  [🚀27-ic]: https://github.com/rubocop-lts/rubocop-ruby2_7/issues?q=is%3Aissue+is%3Aclosed
@@ -423,6 +543,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
423
543
  [🚎30-cwfi]: https://github.com/rubocop-lts/rubocop-ruby3_0/actions/workflows/current.yml/badge.svg
424
544
  [🖐30-hwf]: https://github.com/rubocop-lts/rubocop-ruby3_0/actions/workflows/heads.yml
425
545
  [🖐30-hwfi]: https://github.com/rubocop-lts/rubocop-ruby3_0/actions/workflows/heads.yml/badge.svg
546
+ [🧮30-lwf]: https://github.com/rubocop-lts/rubocop-ruby3_0/actions/workflows/legacy.yml
547
+ [🧮30-lwfi]: https://github.com/rubocop-lts/rubocop-ruby3_0/actions/workflows/legacy.yml/badge.svg
426
548
  [📗30-io]: https://github.com/rubocop-lts/rubocop-ruby3_0/issues
427
549
  [📗30-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby3_0
428
550
  [🚀30-ic]: https://github.com/rubocop-lts/rubocop-ruby3_0/issues?q=is%3Aissue+is%3Aclosed
@@ -440,6 +562,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
440
562
  [🚎31-cwfi]: https://github.com/rubocop-lts/rubocop-ruby3_1/actions/workflows/current.yml/badge.svg
441
563
  [🖐31-hwf]: https://github.com/rubocop-lts/rubocop-ruby3_1/actions/workflows/heads.yml
442
564
  [🖐31-hwfi]: https://github.com/rubocop-lts/rubocop-ruby3_1/actions/workflows/heads.yml/badge.svg
565
+ [🧮31-lwf]: https://github.com/rubocop-lts/rubocop-ruby3_1/actions/workflows/legacy.yml
566
+ [🧮31-lwfi]: https://github.com/rubocop-lts/rubocop-ruby3_1/actions/workflows/legacy.yml/badge.svg
443
567
  [📗31-io]: https://github.com/rubocop-lts/rubocop-ruby3_1/issues
444
568
  [📗31-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby3_1
445
569
  [🚀31-ic]: https://github.com/rubocop-lts/rubocop-ruby3_1/issues?q=is%3Aissue+is%3Aclosed
@@ -457,6 +581,8 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
457
581
  [🚎32-cwfi]: https://github.com/rubocop-lts/rubocop-ruby3_2/actions/workflows/current.yml/badge.svg
458
582
  [🖐32-hwf]: https://github.com/rubocop-lts/rubocop-ruby3_2/actions/workflows/heads.yml
459
583
  [🖐32-hwfi]: https://github.com/rubocop-lts/rubocop-ruby3_2/actions/workflows/heads.yml/badge.svg
584
+ [🧮32-lwf]: https://github.com/rubocop-lts/rubocop-ruby3_2/actions/workflows/legacy.yml
585
+ [🧮32-lwfi]: https://github.com/rubocop-lts/rubocop-ruby3_2/actions/workflows/legacy.yml/badge.svg
460
586
  [📗32-io]: https://github.com/rubocop-lts/rubocop-ruby3_2/issues
461
587
  [📗32-ioi]: https://img.shields.io/github/issues-raw/rubocop-lts/rubocop-ruby3_2
462
588
  [🚀32-ic]: https://github.com/rubocop-lts/rubocop-ruby3_2/issues?q=is%3Aissue+is%3Aclosed
@@ -468,33 +594,60 @@ Add the following to `.github/dependabot.yml` if you use Github Actions.
468
594
  [⛳️32-g]: https://rubygems.org/gems/rubocop-ruby3_2
469
595
  [⛳️32-gh]: https://github.com/rubocop-lts/rubocop-ruby3_2
470
596
 
471
- [aboutme]: https://about.me/peter.boling
472
- [actions]: https://github.com/rubocop-lts/rubocop-lts/actions
473
- [angelme]: https://angel.co/peter-boling
474
- [blogpage]: http://www.railsbling.com/tags/rubocop-lts/
475
- [codecov_coverage]: https://codecov.io/gh/rubocop-lts/rubocop-lts
476
- [code_triage]: https://www.codetriage.com/rubocop-lts/rubocop-lts
477
- [chat]: https://gitter.im/rubocop-lts/rubocop-lts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
478
- [climate_coverage]: https://codeclimate.com/github/rubocop-lts/rubocop-lts/test_coverage
479
- [climate_maintainability]: https://codeclimate.com/github/rubocop-lts/rubocop-lts/maintainability
480
597
  [copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
481
- [conduct]: https://gitlab.com/rubocop-lts/rubocop-lts/-/blob/main/CODE_OF_CONDUCT.md
482
- [contributing]: https://gitlab.com/rubocop-lts/rubocop-lts/-/blob/main/CONTRIBUTING.md
483
- [devto]: https://dev.to/galtzo
484
- [documentation]: https://rubydoc.info/github/rubocop-lts/rubocop-lts/main
485
- [followme]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
598
+
486
599
  [gh_discussions]: https://github.com/rubocop-lts/rubocop-lts/discussions
487
- [gh_sponsors]: https://github.com/sponsors/pboling
488
- [issues]: https://github.com/rubocop-lts/rubocop-lts/issues
489
- [liberapay_donate]: https://liberapay.com/pboling/donate
490
- [license]: LICENSE.txt
600
+
601
+ [conduct]: https://github.com/rubocop-lts/rubocop-lts/blob/main/CODE_OF_CONDUCT.md
602
+
603
+ [contributing]: https://github.com/rubocop-lts/rubocop-lts/blob/main/CONTRIBUTING.md
604
+
605
+ [security]: https://github.com/rubocop-lts/rubocop-lts/blob/main/SECURITY.md
606
+
607
+ [license]: https://github.com/rubocop-lts/rubocop-lts/blob/main/LICENSE.txt
608
+
491
609
  [license-ref]: https://opensource.org/licenses/MIT
492
- [license-img]: https://img.shields.io/badge/License-MIT-green.svg
493
- [peterboling]: http://www.peterboling.com
610
+
611
+ [semver]: http://semver.org/
612
+
494
613
  [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
614
+
495
615
  [railsbling]: http://www.railsbling.com
496
- [rubygems]: https://rubygems.org/gems/rubocop-lts
497
- [security]: https://github.com/rubocop-lts/rubocop-lts/blob/main/SECURITY.md
498
- [semver]: http://semver.org/
499
- [source]: https://github.com/rubocop-lts/rubocop-lts/
616
+
617
+ [peterboling]: http://www.peterboling.com
618
+
619
+ [aboutme]: https://about.me/peter.boling
620
+
621
+ [angelme]: https://angel.co/peter-boling
622
+
623
+ [coderme]:http://coderwall.com/pboling
624
+
625
+ [followme-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
626
+
500
627
  [tweetme]: http://twitter.com/galtzo
628
+
629
+ [politicme]: https://nationalprogressiveparty.org
630
+
631
+ [documentation]: https://rubydoc.info/github/rubocop-lts/rubocop-lts/main
632
+
633
+ [source]: https://github.com/rubocop-lts/rubocop-lts/
634
+
635
+ [actions]: https://github.com/rubocop-lts/rubocop-lts/actions
636
+
637
+ [issues]: https://github.com/rubocop-lts/rubocop-lts/issues
638
+
639
+ [climate_maintainability]: https://codeclimate.com/github/rubocop-lts/rubocop-lts/maintainability
640
+
641
+ [code_triage]: https://www.codetriage.com/rubocop-lts/rubocop-lts
642
+
643
+ [blogpage]: http://www.railsbling.com/tags/rubocop-lts/
644
+
645
+ [rubygems]: https://rubygems.org/gems/rubocop-lts
646
+
647
+ [chat]: https://gitter.im/rubocop-lts/rubocop-lts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
648
+
649
+ [maintenancee_policy]: https://guides.rubyonrails.org/maintenance_policy.html#security-issues
650
+
651
+ [liberapay_donate]: https://liberapay.com/pboling/donate
652
+
653
+ [gh_sponsors]: https://github.com/sponsors/pboling