rubocop 1.4.0 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/logo.png +0 -0
  4. data/assets/output.html.erb +261 -0
  5. data/config/default.yml +49 -9
  6. data/lib/rubocop.rb +4 -0
  7. data/lib/rubocop/cli.rb +5 -1
  8. data/lib/rubocop/cli/command/suggest_extensions.rb +108 -0
  9. data/lib/rubocop/config_loader.rb +1 -1
  10. data/lib/rubocop/config_loader_resolver.rb +5 -1
  11. data/lib/rubocop/config_obsoletion.rb +21 -3
  12. data/lib/rubocop/config_validator.rb +8 -1
  13. data/lib/rubocop/cop/autocorrect_logic.rb +21 -6
  14. data/lib/rubocop/cop/generator.rb +1 -1
  15. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +3 -3
  16. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +6 -1
  17. data/lib/rubocop/cop/layout/end_of_line.rb +5 -5
  18. data/lib/rubocop/cop/layout/first_argument_indentation.rb +7 -2
  19. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +12 -0
  20. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +7 -3
  21. data/lib/rubocop/cop/lint/interpolation_check.rb +7 -2
  22. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +1 -1
  23. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -0
  24. data/lib/rubocop/cop/lint/unexpected_block_arity.rb +85 -0
  25. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +7 -2
  26. data/lib/rubocop/cop/metrics/abc_size.rb +25 -1
  27. data/lib/rubocop/cop/metrics/block_length.rb +13 -7
  28. data/lib/rubocop/cop/metrics/method_length.rb +7 -2
  29. data/lib/rubocop/cop/metrics/parameter_lists.rb +64 -1
  30. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +20 -10
  31. data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +146 -0
  32. data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +6 -1
  33. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -2
  34. data/lib/rubocop/cop/mixin/enforce_superclass.rb +9 -1
  35. data/lib/rubocop/cop/mixin/ignored_methods.rb +36 -3
  36. data/lib/rubocop/cop/mixin/method_complexity.rb +6 -0
  37. data/lib/rubocop/cop/naming/variable_number.rb +3 -1
  38. data/lib/rubocop/cop/style/and_or.rb +10 -0
  39. data/lib/rubocop/cop/style/class_and_module_children.rb +8 -3
  40. data/lib/rubocop/cop/style/format_string.rb +8 -3
  41. data/lib/rubocop/cop/style/if_with_semicolon.rb +39 -4
  42. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +11 -2
  43. data/lib/rubocop/cop/style/numeric_literals.rb +14 -11
  44. data/lib/rubocop/cop/style/redundant_argument.rb +3 -1
  45. data/lib/rubocop/cop/style/redundant_condition.rb +2 -1
  46. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +24 -8
  47. data/lib/rubocop/cop/style/sole_nested_conditional.rb +59 -3
  48. data/lib/rubocop/cop/style/string_concatenation.rb +7 -1
  49. data/lib/rubocop/cop/style/symbol_proc.rb +5 -3
  50. data/lib/rubocop/core_ext/hash.rb +20 -0
  51. data/lib/rubocop/ext/regexp_node.rb +29 -12
  52. data/lib/rubocop/ext/regexp_parser.rb +20 -9
  53. data/lib/rubocop/version.rb +1 -1
  54. metadata +23 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 840dbd224c26defdcf3fe6d5c48f6e495f4288141a38f5e79de74552a0a1d9d8
4
- data.tar.gz: 381215eaceb9e62bdb1ba0df04880b4b8c702bfd4e11df78d0683b539451fb3c
3
+ metadata.gz: 77baac77fdf5ed6293449d9653e1caeadc94b18e49bbd5115176c3681b8ed752
4
+ data.tar.gz: 677ced7d3409d54555aaba855aec07fac0717bdb100eef4ea0196d68688247d6
5
5
  SHA512:
6
- metadata.gz: d3a563aeb426e7ae74dcc9dbc28d153e3b672d0abcae22bea62ff6077bb2bb7eff78cdacf3f4f9a384d09ddc417744135c3a47536145052bbbca985008514b5e
7
- data.tar.gz: 0c832cf607fa6fe0bd5513dc82f315638285f225c7456a2a884830cd173bb740ca741b4ea2279e908b8a00ecb94e60f40c7b2064841efa2152f50ce6a40477a2
6
+ metadata.gz: d083c6f78d892e14780bc3ab2cadf4b4208b87ab3dae357df39cc5dcbd9c2a18ff416795cd73a39c0d743fd07923ccbd092b916be3e738114558aa2b37f724cc
7
+ data.tar.gz: 6a5e0502cfbc9c0c5c11f075b89a91ea7ae4ec1b70134fbe6930caca9f7959282dea23f9358db291cca2a4e1fa72e830a1717c1c845528024eb89d23e6368379
data/README.md CHANGED
@@ -51,7 +51,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
51
51
  in your `Gemfile`:
52
52
 
53
53
  ```rb
54
- gem 'rubocop', '~> 1.4', require: false
54
+ gem 'rubocop', '~> 1.5', require: false
55
55
  ```
56
56
 
57
57
  See [versioning](https://docs.rubocop.org/rubocop/1.0/versioning.html) for further details.
Binary file
@@ -0,0 +1,261 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset='UTF-8' />
5
+ <title>RuboCop Inspection Report</title>
6
+ <%# TODO: Clean up the messy markup and style definitions. %>
7
+ <style>
8
+ * {
9
+ -webkit-box-sizing: border-box;
10
+ -moz-box-sizing: border-box;
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ body, html {
15
+ font-size: 62.5%;
16
+ }
17
+ body {
18
+ background-color: #ecedf0;
19
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
20
+ margin: 0;
21
+ }
22
+ code {
23
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
24
+ font-size: 85%;
25
+ }
26
+ #header {
27
+ background: #f9f9f9;
28
+ color: #333;
29
+ border-bottom: 3px solid #ccc;
30
+ height: 50px;
31
+ padding: 0;
32
+ }
33
+ #header .logo {
34
+ float: left;
35
+ margin: 5px 12px 7px 20px;
36
+ width: 38px;
37
+ height: 38px;
38
+ }
39
+ #header .title {
40
+ display: inline-block;
41
+ float: left;
42
+ height: 50px;
43
+ font-size: 2.4rem;
44
+ letter-spacing: normal;
45
+ line-height: 50px;
46
+ margin: 0;
47
+ }
48
+
49
+ .information, #offenses {
50
+ width: 100%;
51
+ padding: 20px;
52
+ color: #333;
53
+ }
54
+ #offenses {
55
+ padding: 0 20px;
56
+ }
57
+
58
+ .information .infobox {
59
+ border-left: 3px solid;
60
+ border-radius: 4px;
61
+ background-color: #fff;
62
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
63
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
64
+ padding: 15px;
65
+ border-color: #0088cc;
66
+ font-size: 1.4rem;
67
+ }
68
+ .information .infobox .info-title {
69
+ font-size: 1.8rem;
70
+ line-height: 2.2rem;
71
+ margin: 0 0 0.5em;
72
+ }
73
+ .information .offenses-list li {
74
+ line-height: 1.8rem
75
+ }
76
+ .information .offenses-list {
77
+ padding-left: 20px;
78
+ margin-bottom: 0;
79
+ }
80
+
81
+ #offenses .offense-box {
82
+ border-radius: 4px;
83
+ margin-bottom: 20px;
84
+ background-color: #fff;
85
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
86
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
87
+ }
88
+ .fixed .box-title {
89
+ position: fixed;
90
+ top: 0;
91
+ z-index: 10;
92
+ width: 100%;
93
+ }
94
+ .box-title-placeholder {
95
+ display: none;
96
+ }
97
+ .fixed .box-title-placeholder {
98
+ display: block;
99
+ }
100
+ #offenses .offense-box .box-title h3, #offenses .offense-box .box-title-placeholder h3 {
101
+ color: #33353f;
102
+ background-color: #f6f6f6;
103
+ font-size: 2rem;
104
+ line-height: 2rem;
105
+ display: block;
106
+ padding: 15px;
107
+ border-radius: 5px;
108
+ margin: 0;
109
+ }
110
+ #offenses .offense-box .offense-reports {
111
+ padding: 0 15px;
112
+ }
113
+ #offenses .offense-box .offense-reports .report {
114
+ border-bottom: 1px dotted #ddd;
115
+ padding: 15px 0px;
116
+ position: relative;
117
+ font-size: 1.3rem;
118
+ }
119
+ #offenses .offense-box .offense-reports .report:last-child {
120
+ border-bottom: none;
121
+ }
122
+ #offenses .offense-box .offense-reports .report pre code {
123
+ display: block;
124
+ background: #000;
125
+ color: #fff;
126
+ padding: 10px 15px;
127
+ border-radius: 5px;
128
+ line-height: 1.6rem;
129
+ }
130
+ #offenses .offense-box .offense-reports .report .location {
131
+ font-weight: bold;
132
+ }
133
+ #offenses .offense-box .offense-reports .report .message code {
134
+ padding: 0.3em;
135
+ background-color: rgba(0,0,0,0.07);
136
+ border-radius: 3px;
137
+ }
138
+ .severity {
139
+ text-transform: capitalize;
140
+ font-weight: bold;
141
+ }
142
+ .highlight {
143
+ padding: 2px;
144
+ border-radius: 2px;
145
+ font-weight: bold;
146
+ }
147
+ <%- SEVERITY_COLORS.each do |severity, color| %>
148
+ .severity.<%= severity %> {
149
+ color: <%= color %>;
150
+ }
151
+ .highlight.<%= severity %> {
152
+ background-color: <%= color.fade_out(0.4) %>;
153
+ border: 1px solid <%= color.fade_out(0.6) %>;
154
+ }
155
+ <%- end %>
156
+ footer {
157
+ margin-bottom: 20px;
158
+ margin-right: 20px;
159
+ font-size: 1.3rem;
160
+ color: #777;
161
+ text-align: right;
162
+ }
163
+ .extra-code {
164
+ color: #ED9C28
165
+ }
166
+ </style>
167
+
168
+ <script>
169
+ (function() {
170
+ // floating headers. requires classList support.
171
+ if (!('classList' in document.createElement("_"))) return;
172
+
173
+ var loaded = false,
174
+ boxes,
175
+ boxPositions;
176
+
177
+ window.onload = function() {
178
+ var scrollY = window.scrollY;
179
+ boxes = document.querySelectorAll('.offense-box');
180
+ boxPositions = [];
181
+ for (var i = 0; i < boxes.length; i++)
182
+ // need to add scrollY because the page might be somewhere other than the top when loaded.
183
+ boxPositions[i] = boxes[i].getBoundingClientRect().top + scrollY;
184
+ loaded = true;
185
+ };
186
+
187
+ window.onscroll = function() {
188
+ if (!loaded) return;
189
+ var i,
190
+ idx,
191
+ scrollY = window.scrollY;
192
+ for (i = 0; i < boxPositions.length; i++) {
193
+ if (scrollY <= boxPositions[i] - 1) {
194
+ idx = i;
195
+ break;
196
+ }
197
+ }
198
+ if (typeof idx == 'undefined') idx = boxes.length;
199
+ if (idx > 0)
200
+ boxes[idx - 1].classList.add('fixed');
201
+ for (i = 0; i < boxes.length; i++) {
202
+ if (i < idx) continue;
203
+ boxes[i].classList.remove('fixed');
204
+ }
205
+ };
206
+ })();
207
+ </script>
208
+ </head>
209
+ <body>
210
+ <div id="header">
211
+ <img class="logo" src="data:image/png;base64,<%= base64_encoded_logo_image %>" alt="">
212
+ <h1 class="title">RuboCop Inspection Report</h1>
213
+ </div>
214
+ <div class="information">
215
+ <div class="infobox">
216
+ <div class="total">
217
+ <%= pluralize(files.count, 'file') %> inspected,
218
+ <%= pluralize(summary.offense_count, 'offense', no_for_zero: true) %> detected:
219
+ </div>
220
+ <ul class="offenses-list">
221
+ <% files.each do |file| %>
222
+ <% next if file.offenses.none? %>
223
+ <li>
224
+ <a href="#offense_<%= relative_path(file.path) %>">
225
+ <%= relative_path(file.path) %> - <%= pluralize(file.offenses.count, 'offense') %>
226
+ </a>
227
+ </li>
228
+ <% end %>
229
+ </ul>
230
+ </div>
231
+ </div>
232
+ <div id="offenses">
233
+ <% files.each do |file| %>
234
+ <% if file.offenses.any? %>
235
+ <div class="offense-box" id="offense_<%= relative_path(file.path) %>">
236
+ <div class="box-title-placeholder"><h3>&nbsp;</h3></div>
237
+ <div class="box-title"><h3><%= relative_path(file.path) %> - <%= pluralize(file.offenses.count, 'offense') %></h3></div>
238
+ <div class="offense-reports">
239
+ <% file.offenses.each do |offense| %>
240
+ <div class="report">
241
+ <div class="meta">
242
+ <span class="location">Line #<%= offense.location.line %></span> –
243
+ <span class="severity <%= offense.severity %>"><%= offense.severity %>:</span>
244
+ <span class="message"><%= decorated_message(offense) %></span>
245
+ </div>
246
+ <% unless offense.location.source_line.strip.empty? %>
247
+ <pre><code><%= highlighted_source_line(offense) %></code></pre>
248
+ <% end %>
249
+ </div>
250
+ <% end %>
251
+ </div>
252
+ </div>
253
+ <% end %>
254
+ <% end %>
255
+ </div>
256
+ <footer>
257
+ Generated by <a href="https://github.com/rubocop-hq/rubocop">RuboCop</a>
258
+ <span class="version"><%= RuboCop::Version::STRING %></span>
259
+ </footer>
260
+ </body>
261
+ </html>
@@ -139,6 +139,16 @@ AllCops:
139
139
  # from the lock file.) If the Ruby version is still unresolved, RuboCop will
140
140
  # use the oldest officially supported Ruby version (currently Ruby 2.4).
141
141
  TargetRubyVersion: ~
142
+ # Determines if a notification for extension libraries should be shown when
143
+ # rubocop is run. Keys are the name of the extension, and values are an array
144
+ # of gems in the Gemfile that the extension is suggested for, if not already
145
+ # included.
146
+ SuggestExtensions:
147
+ rubocop-rails: [rails]
148
+ rubocop-rspec: [rspec, rspec-rails]
149
+ rubocop-minitest: [minitest]
150
+ rubocop-sequel: [sequel]
151
+ rubocop-rake: [rake]
142
152
 
143
153
  #################### Bundler ###############################
144
154
 
@@ -459,7 +469,7 @@ Layout/EmptyLineAfterMultilineCondition:
459
469
  - https://github.com/airbnb/ruby#multiline-if-newline
460
470
 
461
471
  Layout/EmptyLineBetweenDefs:
462
- Description: 'Use empty lines between defs.'
472
+ Description: 'Use empty lines between class/module/method defs.'
463
473
  StyleGuide: '#empty-lines-between-methods'
464
474
  Enabled: true
465
475
  VersionAdded: '0.49'
@@ -1998,6 +2008,23 @@ Lint/UnderscorePrefixedVariableName:
1998
2008
  VersionAdded: '0.21'
1999
2009
  AllowKeywordBlockArguments: false
2000
2010
 
2011
+ Lint/UnexpectedBlockArity:
2012
+ Description: 'Looks for blocks that have fewer arguments that the calling method expects.'
2013
+ Enabled: pending
2014
+ Safe: false
2015
+ VersionAdded: '1.5'
2016
+ Methods:
2017
+ chunk_while: 2
2018
+ each_with_index: 2
2019
+ each_with_object: 2
2020
+ inject: 2
2021
+ max: 2
2022
+ min: 2
2023
+ minmax: 2
2024
+ reduce: 2
2025
+ slice_when: 2
2026
+ sort: 2
2027
+
2001
2028
  Lint/UnifiedInteger:
2002
2029
  Description: 'Use Integer instead of Fixnum or Bignum.'
2003
2030
  Enabled: true
@@ -2007,6 +2034,7 @@ Lint/UnmodifiedReduceAccumulator:
2007
2034
  Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.
2008
2035
  Enabled: pending
2009
2036
  VersionAdded: '1.1'
2037
+ VersionChanged: '1.5'
2010
2038
 
2011
2039
  Lint/UnreachableCode:
2012
2040
  Description: 'Unreachable code.'
@@ -2110,21 +2138,23 @@ Metrics/AbcSize:
2110
2138
  - https://en.wikipedia.org/wiki/ABC_Software_Metric
2111
2139
  Enabled: true
2112
2140
  VersionAdded: '0.27'
2113
- VersionChanged: '0.81'
2141
+ VersionChanged: '1.5'
2114
2142
  # The ABC size is a calculated magnitude, so this number can be an Integer or
2115
2143
  # a Float.
2116
2144
  IgnoredMethods: []
2145
+ CountRepeatedAttributes: true
2117
2146
  Max: 17
2118
2147
 
2119
2148
  Metrics/BlockLength:
2120
2149
  Description: 'Avoid long blocks with many lines.'
2121
2150
  Enabled: true
2122
2151
  VersionAdded: '0.44'
2123
- VersionChanged: '0.87'
2152
+ VersionChanged: '1.5'
2124
2153
  CountComments: false # count full line comments?
2125
2154
  Max: 25
2126
2155
  CountAsOne: []
2127
- ExcludedMethods:
2156
+ ExcludedMethods: [] # deprecated, retained for backwards compatibility
2157
+ IgnoredMethods:
2128
2158
  # By default, exclude the `#refine` method, as it tends to have larger
2129
2159
  # associated blocks.
2130
2160
  - refine
@@ -2165,11 +2195,12 @@ Metrics/MethodLength:
2165
2195
  StyleGuide: '#short-methods'
2166
2196
  Enabled: true
2167
2197
  VersionAdded: '0.25'
2168
- VersionChanged: '0.87'
2198
+ VersionChanged: '1.5'
2169
2199
  CountComments: false # count full line comments?
2170
2200
  Max: 10
2171
2201
  CountAsOne: []
2172
- ExcludedMethods: []
2202
+ ExcludedMethods: [] # deprecated, retained for backwards compatibility
2203
+ IgnoredMethods: []
2173
2204
 
2174
2205
  Metrics/ModuleLength:
2175
2206
  Description: 'Avoid modules longer than 100 lines of code.'
@@ -2185,8 +2216,10 @@ Metrics/ParameterLists:
2185
2216
  StyleGuide: '#too-many-params'
2186
2217
  Enabled: true
2187
2218
  VersionAdded: '0.25'
2219
+ VersionChanged: '1.5'
2188
2220
  Max: 5
2189
2221
  CountKeywordArgs: true
2222
+ MaxOptionalParameters: 3
2190
2223
 
2191
2224
  Metrics/PerceivedComplexity:
2192
2225
  Description: >-
@@ -2456,7 +2489,7 @@ Naming/VariableNumber:
2456
2489
  StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
2457
2490
  Enabled: true
2458
2491
  VersionAdded: '0.50'
2459
- VersionChanged: '1.3'
2492
+ VersionChanged: '1.4'
2460
2493
  EnforcedStyle: normalcase
2461
2494
  SupportedStyles:
2462
2495
  - snake_case
@@ -2464,7 +2497,13 @@ Naming/VariableNumber:
2464
2497
  - non_integer
2465
2498
  CheckMethodNames: true
2466
2499
  CheckSymbols: true
2467
- AllowedIdentifiers: []
2500
+ AllowedIdentifiers:
2501
+ - capture3 # Open3.capture3
2502
+ - iso8601 # Time#iso8601
2503
+ - rfc1123_date # CGI.rfc1123_date
2504
+ - rfc822 # Time#rfc822
2505
+ - rfc2822 # Time#rfc2822
2506
+ - rfc3339 # DateTime.rfc3339
2468
2507
 
2469
2508
  #################### Security ##############################
2470
2509
 
@@ -4262,6 +4301,7 @@ Style/SoleNestedConditional:
4262
4301
  which can be merged into outer conditional node.
4263
4302
  Enabled: true
4264
4303
  VersionAdded: '0.89'
4304
+ VersionChanged: '1.5'
4265
4305
  AllowModifier: false
4266
4306
 
4267
4307
  Style/SpecialGlobalVars:
@@ -4394,7 +4434,7 @@ Style/SymbolProc:
4394
4434
  Enabled: true
4395
4435
  Safe: false
4396
4436
  VersionAdded: '0.26'
4397
- VersionChanged: '0.64'
4437
+ VersionChanged: '1.5'
4398
4438
  # A list of method names to be ignored by the check.
4399
4439
  # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
4400
4440
  IgnoredMethods:
@@ -18,6 +18,7 @@ require_relative 'rubocop/ext/regexp_node'
18
18
  require_relative 'rubocop/ext/regexp_parser'
19
19
 
20
20
  require_relative 'rubocop/core_ext/string'
21
+ require_relative 'rubocop/core_ext/hash'
21
22
  require_relative 'rubocop/ext/processed_source'
22
23
 
23
24
  require_relative 'rubocop/path_util'
@@ -88,6 +89,7 @@ require_relative 'rubocop/cop/mixin/interpolation'
88
89
  require_relative 'rubocop/cop/mixin/line_length_help'
89
90
  require_relative 'rubocop/cop/mixin/match_range'
90
91
  require_relative 'rubocop/cop/metrics/utils/repeated_csend_discount'
92
+ require_relative 'rubocop/cop/metrics/utils/repeated_attribute_discount'
91
93
  require_relative 'rubocop/cop/mixin/method_complexity'
92
94
  require_relative 'rubocop/cop/mixin/method_preference'
93
95
  require_relative 'rubocop/cop/mixin/min_body_length'
@@ -341,6 +343,7 @@ require_relative 'rubocop/cop/lint/to_json'
341
343
  require_relative 'rubocop/cop/lint/top_level_return_with_argument'
342
344
  require_relative 'rubocop/cop/lint/trailing_comma_in_attribute_declaration'
343
345
  require_relative 'rubocop/cop/lint/underscore_prefixed_variable_name'
346
+ require_relative 'rubocop/cop/lint/unexpected_block_arity'
344
347
  require_relative 'rubocop/cop/lint/unified_integer'
345
348
  require_relative 'rubocop/cop/lint/unmodified_reduce_accumulator'
346
349
  require_relative 'rubocop/cop/lint/unreachable_code'
@@ -646,6 +649,7 @@ require_relative 'rubocop/cli/command/auto_genenerate_config'
646
649
  require_relative 'rubocop/cli/command/execute_runner'
647
650
  require_relative 'rubocop/cli/command/init_dotfile'
648
651
  require_relative 'rubocop/cli/command/show_cops'
652
+ require_relative 'rubocop/cli/command/suggest_extensions'
649
653
  require_relative 'rubocop/cli/command/version'
650
654
  require_relative 'rubocop/config_regeneration'
651
655
  require_relative 'rubocop/options'