danger-spotbugs 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a55fc47e057a553864510afcb8b6f3e2e9cd3e2269aa88cc916603aaf98e11ff
4
+ data.tar.gz: 6436eb0d42ded59b8cac452a607af40ffffa090ff635c1fa6a0f61a4a2089475
5
+ SHA512:
6
+ metadata.gz: '094c261a825b803f0b494bb6776eb422c36ea7657b40a9e9bbacad37b27d41362f570ca775a72e86eb50298140fca259651263cae392bc00d7368e02825c03b1'
7
+ data.tar.gz: b213ee2852c6502fe6561f3e74a061dd4ceadb9739aa8b57ddcd05cc90b488098780b75969d03ea80e2dbd47c1116b762e784b61b752924b0ad6bcdd71efef9f
@@ -0,0 +1,35 @@
1
+ name: Publish
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ branches: [ main ]
6
+
7
+ jobs:
8
+ test:
9
+ name: Publish gem
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - name: Set up Ruby
14
+ uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: '3.0'
17
+ bundler-cache: true
18
+ - name: Run tests
19
+ run: bundle exec rake spec
20
+ - name: Publish gem
21
+ uses: dawidd6/action-publish-gem@v1
22
+ with:
23
+ api_key: ${{secrets.RUBYGEMS_API_KEY}}
24
+ - name: Create git tag
25
+ uses: duderman/gh-gem-tag-action@v1
26
+ id: release_info
27
+ with:
28
+ github_token: ${{ secrets.GITHUB_TOKEN }}
29
+ - uses: xresloader/upload-to-github-release@v1
30
+ env:
31
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32
+ with:
33
+ tag_name: ${{ steps.release_info.outputs.tag }}
34
+ draft: false
35
+ file: '*.gem'
@@ -0,0 +1,24 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+ name: Test with Ruby ${{ matrix.ruby }}
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ matrix:
15
+ ruby: [ '2.4', '2.7', '3.0' ]
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ bundler-cache: true
23
+ - name: Run tests
24
+ run: bundle exec rake spec
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ pkg
3
+ .idea/
4
+ .yardoc
data/.rubocop.yml ADDED
@@ -0,0 +1,4835 @@
1
+ # Common configuration.
2
+
3
+ AllCops:
4
+ RubyInterpreters:
5
+ - ruby
6
+ - macruby
7
+ - rake
8
+ - jruby
9
+ - rbx
10
+ # Include common Ruby source files.
11
+ Include:
12
+ - '**/*.rb'
13
+ - '**/*.arb'
14
+ - '**/*.axlsx'
15
+ - '**/*.builder'
16
+ - '**/*.fcgi'
17
+ - '**/*.gemfile'
18
+ - '**/*.gemspec'
19
+ - '**/*.god'
20
+ - '**/*.jb'
21
+ - '**/*.jbuilder'
22
+ - '**/*.mspec'
23
+ - '**/*.opal'
24
+ - '**/*.pluginspec'
25
+ - '**/*.podspec'
26
+ - '**/*.rabl'
27
+ - '**/*.rake'
28
+ - '**/*.rbuild'
29
+ - '**/*.rbw'
30
+ - '**/*.rbx'
31
+ - '**/*.ru'
32
+ - '**/*.ruby'
33
+ - '**/*.spec'
34
+ - '**/*.thor'
35
+ - '**/*.watchr'
36
+ - '**/.irbrc'
37
+ - '**/.pryrc'
38
+ - '**/.simplecov'
39
+ - '**/buildfile'
40
+ - '**/Appraisals'
41
+ - '**/Berksfile'
42
+ - '**/Brewfile'
43
+ - '**/Buildfile'
44
+ - '**/Capfile'
45
+ - '**/Cheffile'
46
+ - '**/Dangerfile'
47
+ - '**/Deliverfile'
48
+ - '**/Fastfile'
49
+ - '**/*Fastfile'
50
+ - '**/Gemfile'
51
+ - '**/Guardfile'
52
+ - '**/Jarfile'
53
+ - '**/Mavenfile'
54
+ - '**/Podfile'
55
+ - '**/Puppetfile'
56
+ - '**/Rakefile'
57
+ - '**/rakefile'
58
+ - '**/Snapfile'
59
+ - '**/Steepfile'
60
+ - '**/Thorfile'
61
+ - '**/Vagabondfile'
62
+ - '**/Vagrantfile'
63
+ Exclude:
64
+ - 'node_modules/**/*'
65
+ - 'tmp/**/*'
66
+ - 'vendor/**/*'
67
+ - '.git/**/*'
68
+ # Default formatter will be used if no `-f/--format` option is given.
69
+ DefaultFormatter: progress
70
+ # Cop names are displayed in offense messages by default. Change behavior
71
+ # by overriding DisplayCopNames, or by giving the `--no-display-cop-names`
72
+ # option.
73
+ DisplayCopNames: true
74
+ # Style guide URLs are not displayed in offense messages by default. Change
75
+ # behavior by overriding `DisplayStyleGuide`, or by giving the
76
+ # `-S/--display-style-guide` option.
77
+ DisplayStyleGuide: false
78
+ # When specifying style guide URLs, any paths and/or fragments will be
79
+ # evaluated relative to the base URL.
80
+ StyleGuideBaseURL: https://rubystyle.guide
81
+ # Extra details are not displayed in offense messages by default. Change
82
+ # behavior by overriding ExtraDetails, or by giving the
83
+ # `-E/--extra-details` option.
84
+ ExtraDetails: false
85
+ # Additional cops that do not reference a style guide rule may be enabled by
86
+ # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving
87
+ # the `--only-guide-cops` option.
88
+ StyleGuideCopsOnly: false
89
+ # All cops except the ones configured `Enabled: false` in this file are enabled by default.
90
+ # Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`.
91
+ # When `DisabledByDefault` is `true`, all cops in the default configuration
92
+ # are disabled, and only cops in user configuration are enabled. This makes
93
+ # cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`,
94
+ # cops in user configuration will be enabled even if they don't set the
95
+ # Enabled parameter.
96
+ # When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false`
97
+ # in this file are enabled by default. Cops can still be disabled in user configuration.
98
+ # Note that it is invalid to set both EnabledByDefault and DisabledByDefault
99
+ # to true in the same configuration.
100
+ EnabledByDefault: false
101
+ DisabledByDefault: false
102
+ # New cops introduced between major versions are set to a special pending status
103
+ # and are not enabled by default with warning message.
104
+ # Change this behavior by overriding either `NewCops: enable` or `NewCops: disable`.
105
+ # When `NewCops` is `enable`, pending cops are enabled in bulk. Can be overridden by
106
+ # the `--enable-pending-cops` command-line option.
107
+ # When `NewCops` is `disable`, pending cops are disabled in bulk. Can be overridden by
108
+ # the `--disable-pending-cops` command-line option.
109
+ NewCops: enable
110
+ # Enables the result cache if `true`. Can be overridden by the `--cache` command
111
+ # line option.
112
+ UseCache: true
113
+ # Threshold for how many files can be stored in the result cache before some
114
+ # of the files are automatically removed.
115
+ MaxFilesInCache: 20000
116
+ # The cache will be stored in "rubocop_cache" under this directory. If
117
+ # CacheRootDirectory is ~ (nil), which it is by default, the root will be
118
+ # taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if
119
+ # `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`.
120
+ # The CacheRootDirectory can be overwritten by passing the `--cache-root` command
121
+ # line option or by setting `$RUBOCOP_CACHE_ROOT` environment variable.
122
+ CacheRootDirectory: ~
123
+ # It is possible for a malicious user to know the location of RuboCop's cache
124
+ # directory by looking at CacheRootDirectory, and create a symlink in its
125
+ # place that could cause RuboCop to overwrite unintended files, or read
126
+ # malicious input. If you are certain that your cache location is secure from
127
+ # this kind of attack, and wish to use a symlinked cache location, set this
128
+ # value to "true".
129
+ AllowSymlinksInCacheRootDirectory: false
130
+ # What MRI version of the Ruby interpreter is the inspected code intended to
131
+ # run on? (If there is more than one, set this to the lowest version.)
132
+ # If a value is specified for TargetRubyVersion then it is used. Acceptable
133
+ # values are specificed as a float (i.e. 2.5); the teeny version of Ruby
134
+ # should not be included. If the project specifies a Ruby version in the
135
+ # .tool-versions or .ruby-version files, Gemfile or gems.rb file, RuboCop will
136
+ # try to determine the desired version of Ruby by inspecting the
137
+ # .tool-versions file first, then .ruby-version, followed by the Gemfile.lock
138
+ # or gems.locked file. (Although the Ruby version is specified in the Gemfile
139
+ # or gems.rb file, RuboCop reads the final value from the lock file.) If the
140
+ # Ruby version is still unresolved, RuboCop will use the oldest officially
141
+ # supported Ruby version (currently Ruby 2.4).
142
+ TargetRubyVersion: ~
143
+ # Determines if a notification for extension libraries should be shown when
144
+ # rubocop is run. Keys are the name of the extension, and values are an array
145
+ # of gems in the Gemfile that the extension is suggested for, if not already
146
+ # included.
147
+ SuggestExtensions:
148
+ rubocop-rails: [rails]
149
+ rubocop-rspec: [rspec, rspec-rails]
150
+ rubocop-minitest: [minitest]
151
+ rubocop-sequel: [sequel]
152
+ rubocop-rake: [rake]
153
+
154
+ #################### Bundler ###############################
155
+
156
+ Bundler/DuplicatedGem:
157
+ Description: 'Checks for duplicate gem entries in Gemfile.'
158
+ Enabled: true
159
+ VersionAdded: '0.46'
160
+ Include:
161
+ - '**/*.gemfile'
162
+ - '**/Gemfile'
163
+ - '**/gems.rb'
164
+
165
+ Bundler/GemComment:
166
+ Description: 'Add a comment describing each gem.'
167
+ Enabled: false
168
+ VersionAdded: '0.59'
169
+ VersionChanged: '0.85'
170
+ Include:
171
+ - '**/*.gemfile'
172
+ - '**/Gemfile'
173
+ - '**/gems.rb'
174
+ IgnoredGems: []
175
+ OnlyFor: []
176
+
177
+ Bundler/InsecureProtocolSource:
178
+ Description: >-
179
+ The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated
180
+ because HTTP requests are insecure. Please change your source to
181
+ 'https://rubygems.org' if possible, or 'http://rubygems.org' if not.
182
+ Enabled: true
183
+ VersionAdded: '0.50'
184
+ Include:
185
+ - '**/*.gemfile'
186
+ - '**/Gemfile'
187
+ - '**/gems.rb'
188
+
189
+ Bundler/OrderedGems:
190
+ Description: >-
191
+ Gems within groups in the Gemfile should be alphabetically sorted.
192
+ Enabled: true
193
+ VersionAdded: '0.46'
194
+ VersionChanged: '0.47'
195
+ TreatCommentsAsGroupSeparators: true
196
+ # By default, "-" and "_" are ignored for order purposes.
197
+ # This can be overridden by setting this parameter to true.
198
+ ConsiderPunctuation: false
199
+ Include:
200
+ - '**/*.gemfile'
201
+ - '**/Gemfile'
202
+ - '**/gems.rb'
203
+
204
+ #################### Gemspec ###############################
205
+
206
+ Gemspec/DateAssignment:
207
+ Description: 'Checks that `date =` is not used in gemspec file, it is set automatically when the gem is packaged.'
208
+ Enabled: pending
209
+ VersionAdded: '1.10'
210
+ Include:
211
+ - '**/*.gemspec'
212
+
213
+ Gemspec/DuplicatedAssignment:
214
+ Description: 'An attribute assignment method calls should be listed only once in a gemspec.'
215
+ Enabled: true
216
+ VersionAdded: '0.52'
217
+ Include:
218
+ - '**/*.gemspec'
219
+
220
+ Gemspec/OrderedDependencies:
221
+ Description: >-
222
+ Dependencies in the gemspec should be alphabetically sorted.
223
+ Enabled: true
224
+ VersionAdded: '0.51'
225
+ TreatCommentsAsGroupSeparators: true
226
+ # By default, "-" and "_" are ignored for order purposes.
227
+ # This can be overridden by setting this parameter to true.
228
+ ConsiderPunctuation: false
229
+ Include:
230
+ - '**/*.gemspec'
231
+
232
+ Gemspec/RequiredRubyVersion:
233
+ Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.'
234
+ Enabled: true
235
+ VersionAdded: '0.52'
236
+ VersionChanged: '0.89'
237
+ Include:
238
+ - '**/*.gemspec'
239
+
240
+ Gemspec/RubyVersionGlobalsUsage:
241
+ Description: Checks usage of RUBY_VERSION in gemspec.
242
+ StyleGuide: '#no-ruby-version-in-the-gemspec'
243
+ Enabled: true
244
+ VersionAdded: '0.72'
245
+ Include:
246
+ - '**/*.gemspec'
247
+
248
+ #################### Layout ###########################
249
+
250
+ Layout/AccessModifierIndentation:
251
+ Description: Check indentation of private/protected visibility modifiers.
252
+ StyleGuide: '#indent-public-private-protected'
253
+ Enabled: true
254
+ VersionAdded: '0.49'
255
+ EnforcedStyle: indent
256
+ SupportedStyles:
257
+ - outdent
258
+ - indent
259
+ # By default, the indentation width from Layout/IndentationWidth is used
260
+ # But it can be overridden by setting this parameter
261
+ IndentationWidth: ~
262
+
263
+ Layout/ArgumentAlignment:
264
+ Description: >-
265
+ Align the arguments of a method call if they span more
266
+ than one line.
267
+ StyleGuide: '#no-double-indent'
268
+ Enabled: true
269
+ VersionAdded: '0.68'
270
+ VersionChanged: '0.77'
271
+ # Alignment of arguments in multi-line method calls.
272
+ #
273
+ # The `with_first_argument` style aligns the following lines along the same
274
+ # column as the first parameter.
275
+ #
276
+ # method_call(a,
277
+ # b)
278
+ #
279
+ # The `with_fixed_indentation` style aligns the following lines with one
280
+ # level of indentation relative to the start of the line with the method call.
281
+ #
282
+ # method_call(a,
283
+ # b)
284
+ EnforcedStyle: with_first_argument
285
+ SupportedStyles:
286
+ - with_first_argument
287
+ - with_fixed_indentation
288
+ # By default, the indentation width from Layout/IndentationWidth is used
289
+ # But it can be overridden by setting this parameter
290
+ IndentationWidth: ~
291
+
292
+ Layout/ArrayAlignment:
293
+ Description: >-
294
+ Align the elements of an array literal if they span more than
295
+ one line.
296
+ StyleGuide: '#no-double-indent'
297
+ Enabled: true
298
+ VersionAdded: '0.49'
299
+ VersionChanged: '0.77'
300
+ # Alignment of elements of a multi-line array.
301
+ #
302
+ # The `with_first_parameter` style aligns the following lines along the same
303
+ # column as the first element.
304
+ #
305
+ # array = [1, 2, 3,
306
+ # 4, 5, 6]
307
+ #
308
+ # The `with_fixed_indentation` style aligns the following lines with one
309
+ # level of indentation relative to the start of the line with start of array.
310
+ #
311
+ # array = [1, 2, 3,
312
+ # 4, 5, 6]
313
+ EnforcedStyle: with_first_element
314
+ SupportedStyles:
315
+ - with_first_element
316
+ - with_fixed_indentation
317
+ # By default, the indentation width from Layout/IndentationWidth is used
318
+ # But it can be overridden by setting this parameter
319
+ IndentationWidth: ~
320
+
321
+ Layout/AssignmentIndentation:
322
+ Description: >-
323
+ Checks the indentation of the first line of the
324
+ right-hand-side of a multi-line assignment.
325
+ Enabled: true
326
+ VersionAdded: '0.49'
327
+ VersionChanged: '0.77'
328
+ # By default, the indentation width from `Layout/IndentationWidth` is used
329
+ # But it can be overridden by setting this parameter
330
+ IndentationWidth: ~
331
+
332
+ Layout/BeginEndAlignment:
333
+ Description: 'Align ends corresponding to begins correctly.'
334
+ Enabled: true
335
+ VersionAdded: '0.91'
336
+ # The value `start_of_line` means that `end` should be aligned the start of the line
337
+ # where the `begin` keyword is.
338
+ # The value `begin` means that `end` should be aligned with the `begin` keyword.
339
+ EnforcedStyleAlignWith: start_of_line
340
+ SupportedStylesAlignWith:
341
+ - start_of_line
342
+ - begin
343
+ Severity: warning
344
+
345
+ Layout/BlockAlignment:
346
+ Description: 'Align block ends correctly.'
347
+ Enabled: true
348
+ VersionAdded: '0.53'
349
+ # The value `start_of_block` means that the `end` should be aligned with line
350
+ # where the `do` keyword appears.
351
+ # The value `start_of_line` means it should be aligned with the whole
352
+ # expression's starting line.
353
+ # The value `either` means both are allowed.
354
+ EnforcedStyleAlignWith: either
355
+ SupportedStylesAlignWith:
356
+ - either
357
+ - start_of_block
358
+ - start_of_line
359
+
360
+ Layout/BlockEndNewline:
361
+ Description: 'Put end statement of multiline block on its own line.'
362
+ Enabled: true
363
+ VersionAdded: '0.49'
364
+
365
+ Layout/CaseIndentation:
366
+ Description: 'Indentation of when in a case/when/[else/]end.'
367
+ StyleGuide: '#indent-when-to-case'
368
+ Enabled: true
369
+ VersionAdded: '0.49'
370
+ EnforcedStyle: case
371
+ SupportedStyles:
372
+ - case
373
+ - end
374
+ IndentOneStep: false
375
+ # By default, the indentation width from `Layout/IndentationWidth` is used.
376
+ # But it can be overridden by setting this parameter.
377
+ # This only matters if `IndentOneStep` is `true`
378
+ IndentationWidth: ~
379
+
380
+ Layout/ClassStructure:
381
+ Description: 'Enforces a configured order of definitions within a class body.'
382
+ StyleGuide: '#consistent-classes'
383
+ Enabled: false
384
+ VersionAdded: '0.52'
385
+ Categories:
386
+ module_inclusion:
387
+ - include
388
+ - prepend
389
+ - extend
390
+ ExpectedOrder:
391
+ - module_inclusion
392
+ - constants
393
+ - public_class_methods
394
+ - initializer
395
+ - public_methods
396
+ - protected_methods
397
+ - private_methods
398
+
399
+ Layout/ClosingHeredocIndentation:
400
+ Description: 'Checks the indentation of here document closings.'
401
+ Enabled: true
402
+ VersionAdded: '0.57'
403
+
404
+ Layout/ClosingParenthesisIndentation:
405
+ Description: 'Checks the indentation of hanging closing parentheses.'
406
+ Enabled: true
407
+ VersionAdded: '0.49'
408
+
409
+ Layout/CommentIndentation:
410
+ Description: 'Indentation of comments.'
411
+ Enabled: true
412
+ VersionAdded: '0.49'
413
+
414
+ Layout/ConditionPosition:
415
+ Description: >-
416
+ Checks for condition placed in a confusing position relative to
417
+ the keyword.
418
+ StyleGuide: '#same-line-condition'
419
+ Enabled: true
420
+ VersionAdded: '0.53'
421
+ VersionChanged: '0.83'
422
+
423
+ Layout/DefEndAlignment:
424
+ Description: 'Align ends corresponding to defs correctly.'
425
+ Enabled: true
426
+ VersionAdded: '0.53'
427
+ # The value `def` means that `end` should be aligned with the def keyword.
428
+ # The value `start_of_line` means that `end` should be aligned with method
429
+ # calls like `private`, `public`, etc, if present in front of the `def`
430
+ # keyword on the same line.
431
+ EnforcedStyleAlignWith: start_of_line
432
+ SupportedStylesAlignWith:
433
+ - start_of_line
434
+ - def
435
+ Severity: warning
436
+
437
+ Layout/DotPosition:
438
+ Description: 'Checks the position of the dot in multi-line method calls.'
439
+ StyleGuide: '#consistent-multi-line-chains'
440
+ Enabled: true
441
+ VersionAdded: '0.49'
442
+ EnforcedStyle: leading
443
+ SupportedStyles:
444
+ - leading
445
+ - trailing
446
+
447
+ Layout/ElseAlignment:
448
+ Description: 'Align elses and elsifs correctly.'
449
+ Enabled: true
450
+ VersionAdded: '0.49'
451
+
452
+ Layout/EmptyComment:
453
+ Description: 'Checks empty comment.'
454
+ Enabled: true
455
+ VersionAdded: '0.53'
456
+ AllowBorderComment: true
457
+ AllowMarginComment: true
458
+
459
+ Layout/EmptyLineAfterGuardClause:
460
+ Description: 'Add empty line after guard clause.'
461
+ Enabled: true
462
+ VersionAdded: '0.56'
463
+ VersionChanged: '0.59'
464
+
465
+ Layout/EmptyLineAfterMagicComment:
466
+ Description: 'Add an empty line after magic comments to separate them from code.'
467
+ StyleGuide: '#separate-magic-comments-from-code'
468
+ Enabled: true
469
+ VersionAdded: '0.49'
470
+
471
+ Layout/EmptyLineAfterMultilineCondition:
472
+ Description: 'Enforces empty line after multiline condition.'
473
+ # This is disabled, because this style is not very common in practice.
474
+ Enabled: false
475
+ VersionAdded: '0.90'
476
+ Reference:
477
+ - https://github.com/airbnb/ruby#multiline-if-newline
478
+
479
+ Layout/EmptyLineBetweenDefs:
480
+ Description: 'Use empty lines between class/module/method defs.'
481
+ StyleGuide: '#empty-lines-between-methods'
482
+ Enabled: true
483
+ VersionAdded: '0.49'
484
+ VersionChanged: '1.7'
485
+ EmptyLineBetweenMethodDefs: true
486
+ EmptyLineBetweenClassDefs: true
487
+ EmptyLineBetweenModuleDefs: true
488
+ # If `true`, this parameter means that single line method definitions don't
489
+ # need an empty line between them.
490
+ AllowAdjacentOneLineDefs: false
491
+ # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2]
492
+ NumberOfEmptyLines: 1
493
+
494
+ Layout/EmptyLines:
495
+ Description: "Don't use several empty lines in a row."
496
+ StyleGuide: '#two-or-more-empty-lines'
497
+ Enabled: true
498
+ VersionAdded: '0.49'
499
+
500
+ Layout/EmptyLinesAroundAccessModifier:
501
+ Description: "Keep blank lines around access modifiers."
502
+ StyleGuide: '#empty-lines-around-access-modifier'
503
+ Enabled: true
504
+ VersionAdded: '0.49'
505
+ EnforcedStyle: around
506
+ SupportedStyles:
507
+ - around
508
+ - only_before
509
+ Reference:
510
+ # A reference to `EnforcedStyle: only_before`.
511
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
512
+
513
+ Layout/EmptyLinesAroundArguments:
514
+ Description: "Keeps track of empty lines around method arguments."
515
+ Enabled: true
516
+ VersionAdded: '0.52'
517
+
518
+ Layout/EmptyLinesAroundAttributeAccessor:
519
+ Description: "Keep blank lines around attribute accessors."
520
+ StyleGuide: '#empty-lines-around-attribute-accessor'
521
+ Enabled: true
522
+ VersionAdded: '0.83'
523
+ VersionChanged: '0.84'
524
+ AllowAliasSyntax: true
525
+ AllowedMethods:
526
+ - alias_method
527
+ - public
528
+ - protected
529
+ - private
530
+
531
+ Layout/EmptyLinesAroundBeginBody:
532
+ Description: "Keeps track of empty lines around begin-end bodies."
533
+ StyleGuide: '#empty-lines-around-bodies'
534
+ Enabled: true
535
+ VersionAdded: '0.49'
536
+
537
+ Layout/EmptyLinesAroundBlockBody:
538
+ Description: "Keeps track of empty lines around block bodies."
539
+ StyleGuide: '#empty-lines-around-bodies'
540
+ Enabled: true
541
+ VersionAdded: '0.49'
542
+ EnforcedStyle: no_empty_lines
543
+ SupportedStyles:
544
+ - empty_lines
545
+ - no_empty_lines
546
+
547
+ Layout/EmptyLinesAroundClassBody:
548
+ Description: "Keeps track of empty lines around class bodies."
549
+ StyleGuide: '#empty-lines-around-bodies'
550
+ Enabled: true
551
+ VersionAdded: '0.49'
552
+ VersionChanged: '0.53'
553
+ EnforcedStyle: no_empty_lines
554
+ SupportedStyles:
555
+ - empty_lines
556
+ - empty_lines_except_namespace
557
+ - empty_lines_special
558
+ - no_empty_lines
559
+ - beginning_only
560
+ - ending_only
561
+
562
+ Layout/EmptyLinesAroundExceptionHandlingKeywords:
563
+ Description: "Keeps track of empty lines around exception handling keywords."
564
+ StyleGuide: '#empty-lines-around-bodies'
565
+ Enabled: true
566
+ VersionAdded: '0.49'
567
+
568
+ Layout/EmptyLinesAroundMethodBody:
569
+ Description: "Keeps track of empty lines around method bodies."
570
+ StyleGuide: '#empty-lines-around-bodies'
571
+ Enabled: true
572
+ VersionAdded: '0.49'
573
+
574
+ Layout/EmptyLinesAroundModuleBody:
575
+ Description: "Keeps track of empty lines around module bodies."
576
+ StyleGuide: '#empty-lines-around-bodies'
577
+ Enabled: true
578
+ VersionAdded: '0.49'
579
+ EnforcedStyle: no_empty_lines
580
+ SupportedStyles:
581
+ - empty_lines
582
+ - empty_lines_except_namespace
583
+ - empty_lines_special
584
+ - no_empty_lines
585
+
586
+ Layout/EndAlignment:
587
+ Description: 'Align ends correctly.'
588
+ Enabled: true
589
+ VersionAdded: '0.53'
590
+ # The value `keyword` means that `end` should be aligned with the matching
591
+ # keyword (`if`, `while`, etc.).
592
+ # The value `variable` means that in assignments, `end` should be aligned
593
+ # with the start of the variable on the left hand side of `=`. In all other
594
+ # situations, `end` should still be aligned with the keyword.
595
+ # The value `start_of_line` means that `end` should be aligned with the start
596
+ # of the line which the matching keyword appears on.
597
+ EnforcedStyleAlignWith: keyword
598
+ SupportedStylesAlignWith:
599
+ - keyword
600
+ - variable
601
+ - start_of_line
602
+ Severity: warning
603
+
604
+ Layout/EndOfLine:
605
+ Description: 'Use Unix-style line endings.'
606
+ StyleGuide: '#crlf'
607
+ Enabled: true
608
+ VersionAdded: '0.49'
609
+ # The `native` style means that CR+LF (Carriage Return + Line Feed) is
610
+ # enforced on Windows, and LF is enforced on other platforms. The other styles
611
+ # mean LF and CR+LF, respectively.
612
+ EnforcedStyle: native
613
+ SupportedStyles:
614
+ - native
615
+ - lf
616
+ - crlf
617
+
618
+ Layout/ExtraSpacing:
619
+ Description: 'Do not use unnecessary spacing.'
620
+ Enabled: true
621
+ VersionAdded: '0.49'
622
+ # When true, allows most uses of extra spacing if the intent is to align
623
+ # things with the previous or next line, not counting empty lines or comment
624
+ # lines.
625
+ AllowForAlignment: true
626
+ # When true, allows things like 'obj.meth(arg) # comment',
627
+ # rather than insisting on 'obj.meth(arg) # comment'.
628
+ # If done for alignment, either this OR AllowForAlignment will allow it.
629
+ AllowBeforeTrailingComments: false
630
+ # When true, forces the alignment of `=` in assignments on consecutive lines.
631
+ ForceEqualSignAlignment: false
632
+
633
+ Layout/FirstArgumentIndentation:
634
+ Description: 'Checks the indentation of the first argument in a method call.'
635
+ Enabled: true
636
+ VersionAdded: '0.68'
637
+ VersionChanged: '0.77'
638
+ EnforcedStyle: special_for_inner_method_call_in_parentheses
639
+ SupportedStyles:
640
+ # The first parameter should always be indented one step more than the
641
+ # preceding line.
642
+ - consistent
643
+ # The first parameter should always be indented one level relative to the
644
+ # parent that is receiving the parameter
645
+ - consistent_relative_to_receiver
646
+ # The first parameter should normally be indented one step more than the
647
+ # preceding line, but if it's a parameter for a method call that is itself
648
+ # a parameter in a method call, then the inner parameter should be indented
649
+ # relative to the inner method.
650
+ - special_for_inner_method_call
651
+ # Same as `special_for_inner_method_call` except that the special rule only
652
+ # applies if the outer method call encloses its arguments in parentheses.
653
+ - special_for_inner_method_call_in_parentheses
654
+ # By default, the indentation width from `Layout/IndentationWidth` is used
655
+ # But it can be overridden by setting this parameter
656
+ IndentationWidth: ~
657
+
658
+ Layout/FirstArrayElementIndentation:
659
+ Description: >-
660
+ Checks the indentation of the first element in an array
661
+ literal.
662
+ Enabled: true
663
+ VersionAdded: '0.68'
664
+ VersionChanged: '0.77'
665
+ # The value `special_inside_parentheses` means that array literals with
666
+ # brackets that have their opening bracket on the same line as a surrounding
667
+ # opening round parenthesis, shall have their first element indented relative
668
+ # to the first position inside the parenthesis.
669
+ #
670
+ # The value `consistent` means that the indentation of the first element shall
671
+ # always be relative to the first position of the line where the opening
672
+ # bracket is.
673
+ #
674
+ # The value `align_brackets` means that the indentation of the first element
675
+ # shall always be relative to the position of the opening bracket.
676
+ EnforcedStyle: special_inside_parentheses
677
+ SupportedStyles:
678
+ - special_inside_parentheses
679
+ - consistent
680
+ - align_brackets
681
+ # By default, the indentation width from `Layout/IndentationWidth` is used
682
+ # But it can be overridden by setting this parameter
683
+ IndentationWidth: ~
684
+
685
+ Layout/FirstArrayElementLineBreak:
686
+ Description: >-
687
+ Checks for a line break before the first element in a
688
+ multi-line array.
689
+ Enabled: false
690
+ VersionAdded: '0.49'
691
+
692
+ Layout/FirstHashElementIndentation:
693
+ Description: 'Checks the indentation of the first key in a hash literal.'
694
+ Enabled: true
695
+ VersionAdded: '0.68'
696
+ VersionChanged: '0.77'
697
+ # The value `special_inside_parentheses` means that hash literals with braces
698
+ # that have their opening brace on the same line as a surrounding opening
699
+ # round parenthesis, shall have their first key indented relative to the
700
+ # first position inside the parenthesis.
701
+ #
702
+ # The value `consistent` means that the indentation of the first key shall
703
+ # always be relative to the first position of the line where the opening
704
+ # brace is.
705
+ #
706
+ # The value `align_braces` means that the indentation of the first key shall
707
+ # always be relative to the position of the opening brace.
708
+ EnforcedStyle: special_inside_parentheses
709
+ SupportedStyles:
710
+ - special_inside_parentheses
711
+ - consistent
712
+ - align_braces
713
+ # By default, the indentation width from `Layout/IndentationWidth` is used
714
+ # But it can be overridden by setting this parameter
715
+ IndentationWidth: ~
716
+
717
+ Layout/FirstHashElementLineBreak:
718
+ Description: >-
719
+ Checks for a line break before the first element in a
720
+ multi-line hash.
721
+ Enabled: false
722
+ VersionAdded: '0.49'
723
+
724
+ Layout/FirstMethodArgumentLineBreak:
725
+ Description: >-
726
+ Checks for a line break before the first argument in a
727
+ multi-line method call.
728
+ Enabled: false
729
+ VersionAdded: '0.49'
730
+
731
+ Layout/FirstMethodParameterLineBreak:
732
+ Description: >-
733
+ Checks for a line break before the first parameter in a
734
+ multi-line method parameter definition.
735
+ Enabled: false
736
+ VersionAdded: '0.49'
737
+
738
+ Layout/FirstParameterIndentation:
739
+ Description: >-
740
+ Checks the indentation of the first parameter in a
741
+ method definition.
742
+ Enabled: true
743
+ VersionAdded: '0.49'
744
+ VersionChanged: '0.77'
745
+ EnforcedStyle: consistent
746
+ SupportedStyles:
747
+ - consistent
748
+ - align_parentheses
749
+ # By default, the indentation width from `Layout/IndentationWidth` is used
750
+ # But it can be overridden by setting this parameter
751
+ IndentationWidth: ~
752
+
753
+ Layout/HashAlignment:
754
+ Description: >-
755
+ Align the elements of a hash literal if they span more than
756
+ one line.
757
+ Enabled: true
758
+ AllowMultipleStyles: true
759
+ VersionAdded: '0.49'
760
+ VersionChanged: '0.77'
761
+ # Alignment of entries using hash rocket as separator. Valid values are:
762
+ #
763
+ # key - left alignment of keys
764
+ # 'a' => 2
765
+ # 'bb' => 3
766
+ # separator - alignment of hash rockets, keys are right aligned
767
+ # 'a' => 2
768
+ # 'bb' => 3
769
+ # table - left alignment of keys, hash rockets, and values
770
+ # 'a' => 2
771
+ # 'bb' => 3
772
+ EnforcedHashRocketStyle: key
773
+ SupportedHashRocketStyles:
774
+ - key
775
+ - separator
776
+ - table
777
+ # Alignment of entries using colon as separator. Valid values are:
778
+ #
779
+ # key - left alignment of keys
780
+ # a: 0
781
+ # bb: 1
782
+ # separator - alignment of colons, keys are right aligned
783
+ # a: 0
784
+ # bb: 1
785
+ # table - left alignment of keys and values
786
+ # a: 0
787
+ # bb: 1
788
+ EnforcedColonStyle: key
789
+ SupportedColonStyles:
790
+ - key
791
+ - separator
792
+ - table
793
+ # Select whether hashes that are the last argument in a method call should be
794
+ # inspected? Valid values are:
795
+ #
796
+ # always_inspect - Inspect both implicit and explicit hashes.
797
+ # Registers an offense for:
798
+ # function(a: 1,
799
+ # b: 2)
800
+ # Registers an offense for:
801
+ # function({a: 1,
802
+ # b: 2})
803
+ # always_ignore - Ignore both implicit and explicit hashes.
804
+ # Accepts:
805
+ # function(a: 1,
806
+ # b: 2)
807
+ # Accepts:
808
+ # function({a: 1,
809
+ # b: 2})
810
+ # ignore_implicit - Ignore only implicit hashes.
811
+ # Accepts:
812
+ # function(a: 1,
813
+ # b: 2)
814
+ # Registers an offense for:
815
+ # function({a: 1,
816
+ # b: 2})
817
+ # ignore_explicit - Ignore only explicit hashes.
818
+ # Accepts:
819
+ # function({a: 1,
820
+ # b: 2})
821
+ # Registers an offense for:
822
+ # function(a: 1,
823
+ # b: 2)
824
+ EnforcedLastArgumentHashStyle: always_inspect
825
+ SupportedLastArgumentHashStyles:
826
+ - always_inspect
827
+ - always_ignore
828
+ - ignore_implicit
829
+ - ignore_explicit
830
+
831
+ Layout/HeredocArgumentClosingParenthesis:
832
+ Description: >-
833
+ Checks for the placement of the closing parenthesis in a
834
+ method call that passes a HEREDOC string as an argument.
835
+ Enabled: false
836
+ StyleGuide: '#heredoc-argument-closing-parentheses'
837
+ VersionAdded: '0.68'
838
+
839
+ Layout/HeredocIndentation:
840
+ Description: 'This cop checks the indentation of the here document bodies.'
841
+ StyleGuide: '#squiggly-heredocs'
842
+ Enabled: true
843
+ VersionAdded: '0.49'
844
+ VersionChanged: '0.85'
845
+
846
+ Layout/IndentationConsistency:
847
+ Description: 'Keep indentation straight.'
848
+ StyleGuide: '#spaces-indentation'
849
+ Enabled: true
850
+ VersionAdded: '0.49'
851
+ # The difference between `indented` and `normal` is that the `indented_internal_methods`
852
+ # style prescribes that in classes and modules the `protected` and `private`
853
+ # modifier keywords shall be indented the same as public methods and that
854
+ # protected and private members shall be indented one step more than the
855
+ # modifiers. Other than that, both styles mean that entities on the same
856
+ # logical depth shall have the same indentation.
857
+ EnforcedStyle: normal
858
+ SupportedStyles:
859
+ - normal
860
+ - indented_internal_methods
861
+ Reference:
862
+ # A reference to `EnforcedStyle: indented_internal_methods`.
863
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
864
+
865
+ Layout/IndentationStyle:
866
+ Description: 'Consistent indentation either with tabs only or spaces only.'
867
+ StyleGuide: '#spaces-indentation'
868
+ Enabled: true
869
+ VersionAdded: '0.49'
870
+ VersionChanged: '0.82'
871
+ # By default, the indentation width from Layout/IndentationWidth is used
872
+ # But it can be overridden by setting this parameter
873
+ # It is used during auto-correction to determine how many spaces should
874
+ # replace each tab.
875
+ IndentationWidth: ~
876
+ EnforcedStyle: spaces
877
+ SupportedStyles:
878
+ - spaces
879
+ - tabs
880
+
881
+ Layout/IndentationWidth:
882
+ Description: 'Use 2 spaces for indentation.'
883
+ StyleGuide: '#spaces-indentation'
884
+ Enabled: true
885
+ VersionAdded: '0.49'
886
+ # Number of spaces for each indentation level.
887
+ Width: 2
888
+ IgnoredPatterns: []
889
+
890
+ Layout/InitialIndentation:
891
+ Description: >-
892
+ Checks the indentation of the first non-blank non-comment line in a file.
893
+ Enabled: true
894
+ VersionAdded: '0.49'
895
+
896
+ Layout/LeadingCommentSpace:
897
+ Description: 'Comments should start with a space.'
898
+ StyleGuide: '#hash-space'
899
+ Enabled: true
900
+ VersionAdded: '0.49'
901
+ VersionChanged: '0.73'
902
+ AllowDoxygenCommentStyle: false
903
+ AllowGemfileRubyComment: false
904
+
905
+ Layout/LeadingEmptyLines:
906
+ Description: Check for unnecessary blank lines at the beginning of a file.
907
+ Enabled: true
908
+ VersionAdded: '0.57'
909
+ VersionChanged: '0.77'
910
+
911
+ Layout/LineLength:
912
+ Description: 'Checks that line length does not exceed the configured limit.'
913
+ StyleGuide: '#max-line-length'
914
+ Enabled: true
915
+ VersionAdded: '0.25'
916
+ VersionChanged: '1.4'
917
+ AutoCorrect: true
918
+ Max: 160
919
+ # To make it possible to copy or click on URIs in the code, we allow lines
920
+ # containing a URI to be longer than Max.
921
+ AllowHeredoc: true
922
+ AllowURI: true
923
+ URISchemes:
924
+ - http
925
+ - https
926
+ # The IgnoreCopDirectives option causes the LineLength rule to ignore cop
927
+ # directives like '# rubocop: enable ...' when calculating a line's length.
928
+ IgnoreCopDirectives: true
929
+ # The IgnoredPatterns option is a list of !ruby/regexp and/or string
930
+ # elements. Strings will be converted to Regexp objects. A line that matches
931
+ # any regular expression listed in this option will be ignored by LineLength.
932
+ IgnoredPatterns: []
933
+ Exclude:
934
+ - '**/*_spec.rb'
935
+
936
+ Layout/MultilineArrayBraceLayout:
937
+ Description: >-
938
+ Checks that the closing brace in an array literal is
939
+ either on the same line as the last array element, or
940
+ a new line.
941
+ Enabled: true
942
+ VersionAdded: '0.49'
943
+ EnforcedStyle: symmetrical
944
+ SupportedStyles:
945
+ # symmetrical: closing brace is positioned in same way as opening brace
946
+ # new_line: closing brace is always on a new line
947
+ # same_line: closing brace is always on the same line as last element
948
+ - symmetrical
949
+ - new_line
950
+ - same_line
951
+
952
+ Layout/MultilineArrayLineBreaks:
953
+ Description: >-
954
+ Checks that each item in a multi-line array literal
955
+ starts on a separate line.
956
+ Enabled: false
957
+ VersionAdded: '0.67'
958
+
959
+ Layout/MultilineAssignmentLayout:
960
+ Description: 'Check for a newline after the assignment operator in multi-line assignments.'
961
+ StyleGuide: '#indent-conditional-assignment'
962
+ Enabled: false
963
+ VersionAdded: '0.49'
964
+ # The types of assignments which are subject to this rule.
965
+ SupportedTypes:
966
+ - block
967
+ - case
968
+ - class
969
+ - if
970
+ - kwbegin
971
+ - module
972
+ EnforcedStyle: new_line
973
+ SupportedStyles:
974
+ # Ensures that the assignment operator and the rhs are on the same line for
975
+ # the set of supported types.
976
+ - same_line
977
+ # Ensures that the assignment operator and the rhs are on separate lines
978
+ # for the set of supported types.
979
+ - new_line
980
+
981
+ Layout/MultilineBlockLayout:
982
+ Description: 'Ensures newlines after multiline block do statements.'
983
+ Enabled: true
984
+ VersionAdded: '0.49'
985
+
986
+ Layout/MultilineHashBraceLayout:
987
+ Description: >-
988
+ Checks that the closing brace in a hash literal is
989
+ either on the same line as the last hash element, or
990
+ a new line.
991
+ Enabled: true
992
+ VersionAdded: '0.49'
993
+ EnforcedStyle: symmetrical
994
+ SupportedStyles:
995
+ # symmetrical: closing brace is positioned in same way as opening brace
996
+ # new_line: closing brace is always on a new line
997
+ # same_line: closing brace is always on same line as last element
998
+ - symmetrical
999
+ - new_line
1000
+ - same_line
1001
+
1002
+ Layout/MultilineHashKeyLineBreaks:
1003
+ Description: >-
1004
+ Checks that each item in a multi-line hash literal
1005
+ starts on a separate line.
1006
+ Enabled: false
1007
+ VersionAdded: '0.67'
1008
+
1009
+ Layout/MultilineMethodArgumentLineBreaks:
1010
+ Description: >-
1011
+ Checks that each argument in a multi-line method call
1012
+ starts on a separate line.
1013
+ Enabled: false
1014
+ VersionAdded: '0.67'
1015
+
1016
+ Layout/MultilineMethodCallBraceLayout:
1017
+ Description: >-
1018
+ Checks that the closing brace in a method call is
1019
+ either on the same line as the last method argument, or
1020
+ a new line.
1021
+ Enabled: true
1022
+ VersionAdded: '0.49'
1023
+ EnforcedStyle: symmetrical
1024
+ SupportedStyles:
1025
+ # symmetrical: closing brace is positioned in same way as opening brace
1026
+ # new_line: closing brace is always on a new line
1027
+ # same_line: closing brace is always on the same line as last argument
1028
+ - symmetrical
1029
+ - new_line
1030
+ - same_line
1031
+
1032
+ Layout/MultilineMethodCallIndentation:
1033
+ Description: >-
1034
+ Checks indentation of method calls with the dot operator
1035
+ that span more than one line.
1036
+ Enabled: true
1037
+ VersionAdded: '0.49'
1038
+ EnforcedStyle: aligned
1039
+ SupportedStyles:
1040
+ - aligned
1041
+ - indented
1042
+ - indented_relative_to_receiver
1043
+ # By default, the indentation width from Layout/IndentationWidth is used
1044
+ # But it can be overridden by setting this parameter
1045
+ IndentationWidth: ~
1046
+
1047
+ Layout/MultilineMethodDefinitionBraceLayout:
1048
+ Description: >-
1049
+ Checks that the closing brace in a method definition is
1050
+ either on the same line as the last method parameter, or
1051
+ a new line.
1052
+ Enabled: true
1053
+ VersionAdded: '0.49'
1054
+ EnforcedStyle: symmetrical
1055
+ SupportedStyles:
1056
+ # symmetrical: closing brace is positioned in same way as opening brace
1057
+ # new_line: closing brace is always on a new line
1058
+ # same_line: closing brace is always on the same line as last parameter
1059
+ - symmetrical
1060
+ - new_line
1061
+ - same_line
1062
+
1063
+ Layout/MultilineOperationIndentation:
1064
+ Description: >-
1065
+ Checks indentation of binary operations that span more than
1066
+ one line.
1067
+ Enabled: true
1068
+ VersionAdded: '0.49'
1069
+ EnforcedStyle: aligned
1070
+ SupportedStyles:
1071
+ - aligned
1072
+ - indented
1073
+ # By default, the indentation width from `Layout/IndentationWidth` is used
1074
+ # But it can be overridden by setting this parameter
1075
+ IndentationWidth: ~
1076
+
1077
+ Layout/ParameterAlignment:
1078
+ Description: >-
1079
+ Align the parameters of a method definition if they span more
1080
+ than one line.
1081
+ StyleGuide: '#no-double-indent'
1082
+ Enabled: true
1083
+ VersionAdded: '0.49'
1084
+ VersionChanged: '0.77'
1085
+ # Alignment of parameters in multi-line method calls.
1086
+ #
1087
+ # The `with_first_parameter` style aligns the following lines along the same
1088
+ # column as the first parameter.
1089
+ #
1090
+ # def method_foo(a,
1091
+ # b)
1092
+ #
1093
+ # The `with_fixed_indentation` style aligns the following lines with one
1094
+ # level of indentation relative to the start of the line with the method call.
1095
+ #
1096
+ # def method_foo(a,
1097
+ # b)
1098
+ EnforcedStyle: with_first_parameter
1099
+ SupportedStyles:
1100
+ - with_first_parameter
1101
+ - with_fixed_indentation
1102
+ # By default, the indentation width from Layout/IndentationWidth is used
1103
+ # But it can be overridden by setting this parameter
1104
+ IndentationWidth: ~
1105
+
1106
+ Layout/RescueEnsureAlignment:
1107
+ Description: 'Align rescues and ensures correctly.'
1108
+ Enabled: true
1109
+ VersionAdded: '0.49'
1110
+
1111
+ Layout/SpaceAfterColon:
1112
+ Description: 'Use spaces after colons.'
1113
+ StyleGuide: '#spaces-operators'
1114
+ Enabled: true
1115
+ VersionAdded: '0.49'
1116
+
1117
+ Layout/SpaceAfterComma:
1118
+ Description: 'Use spaces after commas.'
1119
+ StyleGuide: '#spaces-operators'
1120
+ Enabled: true
1121
+ VersionAdded: '0.49'
1122
+
1123
+ Layout/SpaceAfterMethodName:
1124
+ Description: >-
1125
+ Do not put a space between a method name and the opening
1126
+ parenthesis in a method definition.
1127
+ StyleGuide: '#parens-no-spaces'
1128
+ Enabled: true
1129
+ VersionAdded: '0.49'
1130
+
1131
+ Layout/SpaceAfterNot:
1132
+ Description: Tracks redundant space after the ! operator.
1133
+ StyleGuide: '#no-space-bang'
1134
+ Enabled: true
1135
+ VersionAdded: '0.49'
1136
+
1137
+ Layout/SpaceAfterSemicolon:
1138
+ Description: 'Use spaces after semicolons.'
1139
+ StyleGuide: '#spaces-operators'
1140
+ Enabled: true
1141
+ VersionAdded: '0.49'
1142
+
1143
+ Layout/SpaceAroundBlockParameters:
1144
+ Description: 'Checks the spacing inside and after block parameters pipes.'
1145
+ Enabled: true
1146
+ VersionAdded: '0.49'
1147
+ EnforcedStyleInsidePipes: no_space
1148
+ SupportedStylesInsidePipes:
1149
+ - space
1150
+ - no_space
1151
+
1152
+ Layout/SpaceAroundEqualsInParameterDefault:
1153
+ Description: >-
1154
+ Checks that the equals signs in parameter default assignments
1155
+ have or don't have surrounding space depending on
1156
+ configuration.
1157
+ StyleGuide: '#spaces-around-equals'
1158
+ Enabled: true
1159
+ VersionAdded: '0.49'
1160
+ EnforcedStyle: space
1161
+ SupportedStyles:
1162
+ - space
1163
+ - no_space
1164
+
1165
+ Layout/SpaceAroundKeyword:
1166
+ Description: 'Use a space around keywords if appropriate.'
1167
+ Enabled: true
1168
+ VersionAdded: '0.49'
1169
+
1170
+ Layout/SpaceAroundMethodCallOperator:
1171
+ Description: 'Checks method call operators to not have spaces around them.'
1172
+ Enabled: true
1173
+ VersionAdded: '0.82'
1174
+
1175
+ Layout/SpaceAroundOperators:
1176
+ Description: 'Use a single space around operators.'
1177
+ StyleGuide: '#spaces-operators'
1178
+ Enabled: true
1179
+ VersionAdded: '0.49'
1180
+ # When `true`, allows most uses of extra spacing if the intent is to align
1181
+ # with an operator on the previous or next line, not counting empty lines
1182
+ # or comment lines.
1183
+ AllowForAlignment: true
1184
+ EnforcedStyleForExponentOperator: no_space
1185
+ SupportedStylesForExponentOperator:
1186
+ - space
1187
+ - no_space
1188
+
1189
+ Layout/SpaceBeforeBlockBraces:
1190
+ Description: >-
1191
+ Checks that the left block brace has or doesn't have space
1192
+ before it.
1193
+ Enabled: true
1194
+ VersionAdded: '0.49'
1195
+ EnforcedStyle: space
1196
+ SupportedStyles:
1197
+ - space
1198
+ - no_space
1199
+ EnforcedStyleForEmptyBraces: space
1200
+ SupportedStylesForEmptyBraces:
1201
+ - space
1202
+ - no_space
1203
+ VersionChanged: '0.52'
1204
+
1205
+ Layout/SpaceBeforeBrackets:
1206
+ Description: 'Checks for receiver with a space before the opening brackets.'
1207
+ StyleGuide: '#space-in-brackets-access'
1208
+ Enabled: pending
1209
+ VersionAdded: '1.7'
1210
+
1211
+ Layout/SpaceBeforeComma:
1212
+ Description: 'No spaces before commas.'
1213
+ Enabled: true
1214
+ VersionAdded: '0.49'
1215
+
1216
+ Layout/SpaceBeforeComment:
1217
+ Description: >-
1218
+ Checks for missing space between code and a comment on the
1219
+ same line.
1220
+ Enabled: true
1221
+ VersionAdded: '0.49'
1222
+
1223
+ Layout/SpaceBeforeFirstArg:
1224
+ Description: >-
1225
+ Checks that exactly one space is used between a method name
1226
+ and the first argument for method calls without parentheses.
1227
+ Enabled: true
1228
+ VersionAdded: '0.49'
1229
+ # When `true`, allows most uses of extra spacing if the intent is to align
1230
+ # things with the previous or next line, not counting empty lines or comment
1231
+ # lines.
1232
+ AllowForAlignment: true
1233
+
1234
+ Layout/SpaceBeforeSemicolon:
1235
+ Description: 'No spaces before semicolons.'
1236
+ Enabled: true
1237
+ VersionAdded: '0.49'
1238
+
1239
+ Layout/SpaceInLambdaLiteral:
1240
+ Description: 'Checks for spaces in lambda literals.'
1241
+ Enabled: true
1242
+ VersionAdded: '0.49'
1243
+ EnforcedStyle: require_no_space
1244
+ SupportedStyles:
1245
+ - require_no_space
1246
+ - require_space
1247
+
1248
+ Layout/SpaceInsideArrayLiteralBrackets:
1249
+ Description: 'Checks the spacing inside array literal brackets.'
1250
+ Enabled: true
1251
+ VersionAdded: '0.52'
1252
+ EnforcedStyle: no_space
1253
+ SupportedStyles:
1254
+ - space
1255
+ - no_space
1256
+ # 'compact' normally requires a space inside the brackets, with the exception
1257
+ # that successive left brackets or right brackets are collapsed together
1258
+ - compact
1259
+ EnforcedStyleForEmptyBrackets: no_space
1260
+ SupportedStylesForEmptyBrackets:
1261
+ - space
1262
+ - no_space
1263
+
1264
+ Layout/SpaceInsideArrayPercentLiteral:
1265
+ Description: 'No unnecessary additional spaces between elements in %i/%w literals.'
1266
+ Enabled: true
1267
+ VersionAdded: '0.49'
1268
+
1269
+ Layout/SpaceInsideBlockBraces:
1270
+ Description: >-
1271
+ Checks that block braces have or don't have surrounding space.
1272
+ For blocks taking parameters, checks that the left brace has
1273
+ or doesn't have trailing space.
1274
+ Enabled: true
1275
+ VersionAdded: '0.49'
1276
+ EnforcedStyle: space
1277
+ SupportedStyles:
1278
+ - space
1279
+ - no_space
1280
+ EnforcedStyleForEmptyBraces: no_space
1281
+ SupportedStylesForEmptyBraces:
1282
+ - space
1283
+ - no_space
1284
+ # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict.
1285
+ SpaceBeforeBlockParameters: true
1286
+
1287
+ Layout/SpaceInsideHashLiteralBraces:
1288
+ Description: "Use spaces inside hash literal braces - or don't."
1289
+ StyleGuide: '#spaces-braces'
1290
+ Enabled: true
1291
+ VersionAdded: '0.49'
1292
+ EnforcedStyle: space
1293
+ SupportedStyles:
1294
+ - space
1295
+ - no_space
1296
+ # 'compact' normally requires a space inside hash braces, with the exception
1297
+ # that successive left braces or right braces are collapsed together
1298
+ - compact
1299
+ EnforcedStyleForEmptyBraces: no_space
1300
+ SupportedStylesForEmptyBraces:
1301
+ - space
1302
+ - no_space
1303
+
1304
+
1305
+ Layout/SpaceInsideParens:
1306
+ Description: 'No spaces after ( or before ).'
1307
+ StyleGuide: '#spaces-braces'
1308
+ Enabled: true
1309
+ VersionAdded: '0.49'
1310
+ VersionChanged: '0.55'
1311
+ EnforcedStyle: no_space
1312
+ SupportedStyles:
1313
+ - space
1314
+ - no_space
1315
+
1316
+ Layout/SpaceInsidePercentLiteralDelimiters:
1317
+ Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.'
1318
+ Enabled: true
1319
+ VersionAdded: '0.49'
1320
+
1321
+ Layout/SpaceInsideRangeLiteral:
1322
+ Description: 'No spaces inside range literals.'
1323
+ StyleGuide: '#no-space-inside-range-literals'
1324
+ Enabled: true
1325
+ VersionAdded: '0.49'
1326
+
1327
+ Layout/SpaceInsideReferenceBrackets:
1328
+ Description: 'Checks the spacing inside referential brackets.'
1329
+ Enabled: true
1330
+ VersionAdded: '0.52'
1331
+ VersionChanged: '0.53'
1332
+ EnforcedStyle: no_space
1333
+ SupportedStyles:
1334
+ - space
1335
+ - no_space
1336
+ EnforcedStyleForEmptyBrackets: no_space
1337
+ SupportedStylesForEmptyBrackets:
1338
+ - space
1339
+ - no_space
1340
+
1341
+ Layout/SpaceInsideStringInterpolation:
1342
+ Description: 'Checks for padding/surrounding spaces inside string interpolation.'
1343
+ StyleGuide: '#string-interpolation'
1344
+ Enabled: true
1345
+ VersionAdded: '0.49'
1346
+ EnforcedStyle: no_space
1347
+ SupportedStyles:
1348
+ - space
1349
+ - no_space
1350
+
1351
+ Layout/TrailingEmptyLines:
1352
+ Description: 'Checks trailing blank lines and final newline.'
1353
+ StyleGuide: '#newline-eof'
1354
+ Enabled: true
1355
+ VersionAdded: '0.49'
1356
+ VersionChanged: '0.77'
1357
+ EnforcedStyle: final_newline
1358
+ SupportedStyles:
1359
+ - final_newline
1360
+ - final_blank_line
1361
+
1362
+ Layout/TrailingWhitespace:
1363
+ Description: 'Avoid trailing whitespace.'
1364
+ StyleGuide: '#no-trailing-whitespace'
1365
+ Enabled: true
1366
+ VersionAdded: '0.49'
1367
+ VersionChanged: '1.0'
1368
+ AllowInHeredoc: false
1369
+
1370
+ #################### Lint ##################################
1371
+ ### Warnings
1372
+
1373
+ Lint/AmbiguousAssignment:
1374
+ Description: 'Checks for mistyped shorthand assignments.'
1375
+ Enabled: pending
1376
+ VersionAdded: '1.7'
1377
+
1378
+ Lint/AmbiguousBlockAssociation:
1379
+ Description: >-
1380
+ Checks for ambiguous block association with method when param passed without
1381
+ parentheses.
1382
+ StyleGuide: '#syntax'
1383
+ Enabled: true
1384
+ VersionAdded: '0.48'
1385
+
1386
+ Lint/AmbiguousOperator:
1387
+ Description: >-
1388
+ Checks for ambiguous operators in the first argument of a
1389
+ method invocation without parentheses.
1390
+ StyleGuide: '#method-invocation-parens'
1391
+ Enabled: true
1392
+ VersionAdded: '0.17'
1393
+ VersionChanged: '0.83'
1394
+
1395
+ Lint/AmbiguousRegexpLiteral:
1396
+ Description: >-
1397
+ Checks for ambiguous regexp literals in the first argument of
1398
+ a method invocation without parentheses.
1399
+ Enabled: true
1400
+ VersionAdded: '0.17'
1401
+ VersionChanged: '0.83'
1402
+
1403
+ Lint/AssignmentInCondition:
1404
+ Description: "Don't use assignment in conditions."
1405
+ StyleGuide: '#safe-assignment-in-condition'
1406
+ Enabled: true
1407
+ VersionAdded: '0.9'
1408
+ AllowSafeAssignment: true
1409
+
1410
+ Lint/BigDecimalNew:
1411
+ Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.'
1412
+ Enabled: true
1413
+ VersionAdded: '0.53'
1414
+
1415
+ Lint/BinaryOperatorWithIdenticalOperands:
1416
+ Description: 'This cop checks for places where binary operator has identical operands.'
1417
+ Enabled: true
1418
+ Safe: false
1419
+ VersionAdded: '0.89'
1420
+ VersionChanged: '1.7'
1421
+
1422
+ Lint/BooleanSymbol:
1423
+ Description: 'Check for `:true` and `:false` symbols.'
1424
+ Enabled: true
1425
+ Safe: false
1426
+ VersionAdded: '0.50'
1427
+ VersionChanged: '0.83'
1428
+
1429
+ Lint/CircularArgumentReference:
1430
+ Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument."
1431
+ Enabled: true
1432
+ VersionAdded: '0.33'
1433
+
1434
+ Lint/ConstantDefinitionInBlock:
1435
+ Description: 'Do not define constants within a block.'
1436
+ StyleGuide: '#no-constant-definition-in-block'
1437
+ Enabled: true
1438
+ VersionAdded: '0.91'
1439
+ VersionChanged: '1.3'
1440
+ # `enums` for Typed Enums via T::Enum in Sorbet.
1441
+ # https://sorbet.org/docs/tenum
1442
+ AllowedMethods:
1443
+ - enums
1444
+
1445
+ Lint/ConstantResolution:
1446
+ Description: 'Check that constants are fully qualified with `::`.'
1447
+ Enabled: false
1448
+ VersionAdded: '0.86'
1449
+ # Restrict this cop to only looking at certain names
1450
+ Only: []
1451
+ # Restrict this cop from only looking at certain names
1452
+ Ignore: []
1453
+
1454
+ Lint/Debugger:
1455
+ Description: 'Check for debugger calls.'
1456
+ Enabled: true
1457
+ VersionAdded: '0.14'
1458
+ VersionChanged: '1.10'
1459
+ DebuggerMethods:
1460
+ # Groups are available so that a specific group can be disabled in
1461
+ # a user's configuration, but are otherwise not significant.
1462
+ Kernel:
1463
+ - binding.irb
1464
+ Byebug:
1465
+ - byebug
1466
+ - remote_byebug
1467
+ - Kernel.byebug
1468
+ - Kernel.remote_byebug
1469
+ Capybara:
1470
+ - save_and_open_page
1471
+ - save_and_open_screenshot
1472
+ Pry:
1473
+ - binding.pry
1474
+ - binding.remote_pry
1475
+ - binding.pry_remote
1476
+ - Pry.rescue
1477
+ Rails:
1478
+ - debugger
1479
+ - Kernel.debugger
1480
+ WebConsole:
1481
+ - binding.console
1482
+
1483
+ Lint/DeprecatedClassMethods:
1484
+ Description: 'Check for deprecated class method calls.'
1485
+ Enabled: true
1486
+ VersionAdded: '0.19'
1487
+
1488
+ Lint/DeprecatedConstants:
1489
+ Description: 'Checks for deprecated constants.'
1490
+ Enabled: pending
1491
+ VersionAdded: '1.8'
1492
+ # You can configure deprecated constants.
1493
+ # If there is an alternative method, you can set alternative value as `Alternative`.
1494
+ # And you can set the deprecated version as `DeprecatedVersion`.
1495
+ # These options can be omitted if they are not needed.
1496
+ #
1497
+ # DeprecatedConstants:
1498
+ # 'DEPRECATED_CONSTANT':
1499
+ # Alternative: 'alternative_value'
1500
+ # DeprecatedVersion: 'deprecated_version'
1501
+ #
1502
+ DeprecatedConstants:
1503
+ 'NIL':
1504
+ Alternative: 'nil'
1505
+ DeprecatedVersion: '2.4'
1506
+ 'TRUE':
1507
+ Alternative: 'true'
1508
+ DeprecatedVersion: '2.4'
1509
+ 'FALSE':
1510
+ Alternative: 'false'
1511
+ DeprecatedVersion: '2.4'
1512
+ 'Random::DEFAULT':
1513
+ Alternative: 'Random.new'
1514
+ DeprecatedVersion: '3.0'
1515
+
1516
+ Lint/DeprecatedOpenSSLConstant:
1517
+ Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`."
1518
+ Enabled: true
1519
+ VersionAdded: '0.84'
1520
+
1521
+ Lint/DisjunctiveAssignmentInConstructor:
1522
+ Description: 'In constructor, plain assignment is preferred over disjunctive.'
1523
+ Enabled: true
1524
+ Safe: false
1525
+ VersionAdded: '0.62'
1526
+ VersionChanged: '0.88'
1527
+
1528
+ Lint/DuplicateBranch:
1529
+ Description: Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs.
1530
+ Enabled: pending
1531
+ VersionAdded: '1.3'
1532
+ VersionChanged: '1.7'
1533
+ IgnoreLiteralBranches: false
1534
+ IgnoreConstantBranches: false
1535
+
1536
+ Lint/DuplicateCaseCondition:
1537
+ Description: 'Do not repeat values in case conditionals.'
1538
+ Enabled: true
1539
+ VersionAdded: '0.45'
1540
+
1541
+ Lint/DuplicateElsifCondition:
1542
+ Description: 'Do not repeat conditions used in if `elsif`.'
1543
+ Enabled: true
1544
+ VersionAdded: '0.88'
1545
+
1546
+ Lint/DuplicateHashKey:
1547
+ Description: 'Check for duplicate keys in hash literals.'
1548
+ Enabled: true
1549
+ VersionAdded: '0.34'
1550
+ VersionChanged: '0.77'
1551
+
1552
+ Lint/DuplicateMethods:
1553
+ Description: 'Check for duplicate method definitions.'
1554
+ Enabled: true
1555
+ VersionAdded: '0.29'
1556
+
1557
+ Lint/DuplicateRegexpCharacterClassElement:
1558
+ Description: 'Checks for duplicate elements in Regexp character classes.'
1559
+ Enabled: pending
1560
+ VersionAdded: '1.1'
1561
+
1562
+ Lint/DuplicateRequire:
1563
+ Description: 'Check for duplicate `require`s and `require_relative`s.'
1564
+ Enabled: true
1565
+ VersionAdded: '0.90'
1566
+
1567
+ Lint/DuplicateRescueException:
1568
+ Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
1569
+ Enabled: true
1570
+ VersionAdded: '0.89'
1571
+
1572
+ Lint/EachWithObjectArgument:
1573
+ Description: 'Check for immutable argument given to each_with_object.'
1574
+ Enabled: true
1575
+ VersionAdded: '0.31'
1576
+
1577
+ Lint/ElseLayout:
1578
+ Description: 'Check for odd code arrangement in an else block.'
1579
+ Enabled: true
1580
+ VersionAdded: '0.17'
1581
+ VersionChanged: '1.2'
1582
+
1583
+ Lint/EmptyBlock:
1584
+ Description: 'This cop checks for blocks without a body.'
1585
+ Enabled: pending
1586
+ VersionAdded: '1.1'
1587
+ VersionChanged: '1.3'
1588
+ AllowComments: true
1589
+ AllowEmptyLambdas: true
1590
+
1591
+ Lint/EmptyClass:
1592
+ Description: 'Checks for classes and metaclasses without a body.'
1593
+ Enabled: pending
1594
+ VersionAdded: '1.3'
1595
+ AllowComments: false
1596
+
1597
+ Lint/EmptyConditionalBody:
1598
+ Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
1599
+ Enabled: true
1600
+ AllowComments: true
1601
+ VersionAdded: '0.89'
1602
+
1603
+ Lint/EmptyEnsure:
1604
+ Description: 'Checks for empty ensure block.'
1605
+ Enabled: true
1606
+ VersionAdded: '0.10'
1607
+ VersionChanged: '0.48'
1608
+
1609
+ Lint/EmptyExpression:
1610
+ Description: 'Checks for empty expressions.'
1611
+ Enabled: true
1612
+ VersionAdded: '0.45'
1613
+
1614
+ Lint/EmptyFile:
1615
+ Description: 'Enforces that Ruby source files are not empty.'
1616
+ Enabled: true
1617
+ AllowComments: true
1618
+ VersionAdded: '0.90'
1619
+
1620
+ Lint/EmptyInterpolation:
1621
+ Description: 'Checks for empty string interpolation.'
1622
+ Enabled: true
1623
+ VersionAdded: '0.20'
1624
+ VersionChanged: '0.45'
1625
+
1626
+ Lint/EmptyWhen:
1627
+ Description: 'Checks for `when` branches with empty bodies.'
1628
+ Enabled: true
1629
+ AllowComments: true
1630
+ VersionAdded: '0.45'
1631
+ VersionChanged: '0.83'
1632
+
1633
+ Lint/EnsureReturn:
1634
+ Description: 'Do not use return in an ensure block.'
1635
+ StyleGuide: '#no-return-ensure'
1636
+ Enabled: true
1637
+ VersionAdded: '0.9'
1638
+ VersionChanged: '0.83'
1639
+
1640
+ Lint/ErbNewArguments:
1641
+ Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.'
1642
+ Enabled: true
1643
+ VersionAdded: '0.56'
1644
+
1645
+ Lint/FlipFlop:
1646
+ Description: 'Checks for flip-flops.'
1647
+ StyleGuide: '#no-flip-flops'
1648
+ Enabled: true
1649
+ VersionAdded: '0.16'
1650
+
1651
+ Lint/FloatComparison:
1652
+ Description: 'Checks for the presence of precise comparison of floating point numbers.'
1653
+ StyleGuide: '#float-comparison'
1654
+ Enabled: true
1655
+ VersionAdded: '0.89'
1656
+
1657
+ Lint/FloatOutOfRange:
1658
+ Description: >-
1659
+ Catches floating-point literals too large or small for Ruby to
1660
+ represent.
1661
+ Enabled: true
1662
+ VersionAdded: '0.36'
1663
+
1664
+ Lint/FormatParameterMismatch:
1665
+ Description: 'The number of parameters to format/sprint must match the fields.'
1666
+ Enabled: true
1667
+ VersionAdded: '0.33'
1668
+
1669
+ Lint/HashCompareByIdentity:
1670
+ Description: 'Prefer using `Hash#compare_by_identity` than using `object_id` for keys.'
1671
+ StyleGuide: '#identity-comparison'
1672
+ Enabled: true
1673
+ Safe: false
1674
+ VersionAdded: '0.93'
1675
+
1676
+ Lint/HeredocMethodCallPosition:
1677
+ Description: >-
1678
+ Checks for the ordering of a method call where
1679
+ the receiver of the call is a HEREDOC.
1680
+ Enabled: false
1681
+ StyleGuide: '#heredoc-method-calls'
1682
+ VersionAdded: '0.68'
1683
+
1684
+ Lint/IdentityComparison:
1685
+ Description: 'Prefer `equal?` over `==` when comparing `object_id`.'
1686
+ Enabled: true
1687
+ StyleGuide: '#identity-comparison'
1688
+ VersionAdded: '0.91'
1689
+
1690
+ Lint/ImplicitStringConcatenation:
1691
+ Description: >-
1692
+ Checks for adjacent string literals on the same line, which
1693
+ could better be represented as a single string literal.
1694
+ Enabled: true
1695
+ VersionAdded: '0.36'
1696
+
1697
+ Lint/IneffectiveAccessModifier:
1698
+ Description: >-
1699
+ Checks for attempts to use `private` or `protected` to set
1700
+ the visibility of a class method, which does not work.
1701
+ Enabled: true
1702
+ VersionAdded: '0.36'
1703
+
1704
+ Lint/InheritException:
1705
+ Description: 'Avoid inheriting from the `Exception` class.'
1706
+ Enabled: true
1707
+ VersionAdded: '0.41'
1708
+ # The default base class in favour of `Exception`.
1709
+ EnforcedStyle: runtime_error
1710
+ SupportedStyles:
1711
+ - runtime_error
1712
+ - standard_error
1713
+
1714
+ Lint/InterpolationCheck:
1715
+ Description: 'Raise warning for interpolation in single q strs.'
1716
+ Enabled: true
1717
+ Safe: false
1718
+ VersionAdded: '0.50'
1719
+ VersionChanged: '0.87'
1720
+
1721
+ Lint/LambdaWithoutLiteralBlock:
1722
+ Description: 'Checks uses of lambda without a literal block.'
1723
+ Enabled: pending
1724
+ VersionAdded: '1.8'
1725
+
1726
+ Lint/LiteralAsCondition:
1727
+ Description: 'Checks of literals used in conditions.'
1728
+ Enabled: true
1729
+ VersionAdded: '0.51'
1730
+
1731
+ Lint/LiteralInInterpolation:
1732
+ Description: 'Checks for literals used in interpolation.'
1733
+ Enabled: true
1734
+ VersionAdded: '0.19'
1735
+ VersionChanged: '0.32'
1736
+
1737
+ Lint/Loop:
1738
+ Description: >-
1739
+ Use Kernel#loop with break rather than begin/end/until or
1740
+ begin/end/while for post-loop tests.
1741
+ StyleGuide: '#loop-with-break'
1742
+ Enabled: true
1743
+ VersionAdded: '0.9'
1744
+ VersionChanged: '1.3'
1745
+ Safe: false
1746
+
1747
+ Lint/MissingCopEnableDirective:
1748
+ Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
1749
+ Enabled: true
1750
+ VersionAdded: '0.52'
1751
+ # Maximum number of consecutive lines the cop can be disabled for.
1752
+ # 0 allows only single-line disables
1753
+ # 1 would mean the maximum allowed is the following:
1754
+ # # rubocop:disable SomeCop
1755
+ # a = 1
1756
+ # # rubocop:enable SomeCop
1757
+ # .inf for any size
1758
+ MaximumRangeSize: .inf
1759
+
1760
+ Lint/MissingSuper:
1761
+ Description: >-
1762
+ This cop checks for the presence of constructors and lifecycle callbacks
1763
+ without calls to `super`'.
1764
+ Enabled: true
1765
+ VersionAdded: '0.89'
1766
+ VersionChanged: '1.4'
1767
+
1768
+ Lint/MixedRegexpCaptureTypes:
1769
+ Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
1770
+ Enabled: true
1771
+ VersionAdded: '0.85'
1772
+
1773
+ Lint/MultipleComparison:
1774
+ Description: "Use `&&` operator to compare multiple values."
1775
+ Enabled: true
1776
+ VersionAdded: '0.47'
1777
+ VersionChanged: '1.1'
1778
+ AllowMethodComparison: true
1779
+
1780
+ Lint/NestedMethodDefinition:
1781
+ Description: 'Do not use nested method definitions.'
1782
+ StyleGuide: '#no-nested-methods'
1783
+ Enabled: true
1784
+ VersionAdded: '0.32'
1785
+
1786
+ Lint/NestedPercentLiteral:
1787
+ Description: 'Checks for nested percent literals.'
1788
+ Enabled: true
1789
+ VersionAdded: '0.52'
1790
+
1791
+ Lint/NextWithoutAccumulator:
1792
+ Description: >-
1793
+ Do not omit the accumulator when calling `next`
1794
+ in a `reduce`/`inject` block.
1795
+ Enabled: true
1796
+ VersionAdded: '0.36'
1797
+
1798
+ Lint/NoReturnInBeginEndBlocks:
1799
+ Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.'
1800
+ Enabled: pending
1801
+ VersionAdded: '1.2'
1802
+
1803
+ Lint/NonDeterministicRequireOrder:
1804
+ Description: 'Always sort arrays returned by Dir.glob when requiring files.'
1805
+ Enabled: true
1806
+ VersionAdded: '0.78'
1807
+ Safe: false
1808
+
1809
+ Lint/NonLocalExitFromIterator:
1810
+ Description: 'Do not use return in iterator to cause non-local exit.'
1811
+ Enabled: true
1812
+ VersionAdded: '0.30'
1813
+
1814
+ Lint/NumberConversion:
1815
+ Description: 'Checks unsafe usage of number conversion methods.'
1816
+ Enabled: false
1817
+ VersionAdded: '0.53'
1818
+ VersionChanged: '1.1'
1819
+ SafeAutoCorrect: false
1820
+ IgnoredMethods: []
1821
+ IgnoredClasses:
1822
+ - Time
1823
+ - DateTime
1824
+
1825
+ Lint/NumberedParameterAssignment:
1826
+ Description: 'Checks for uses of numbered parameter assignment.'
1827
+ Enabled: pending
1828
+ VersionAdded: '1.9'
1829
+
1830
+ Lint/OrAssignmentToConstant:
1831
+ Description: 'Checks unintended or-assignment to constant.'
1832
+ Enabled: pending
1833
+ Safe: false
1834
+ VersionAdded: '1.9'
1835
+
1836
+ Lint/OrderedMagicComments:
1837
+ Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
1838
+ Enabled: true
1839
+ VersionAdded: '0.53'
1840
+
1841
+ Lint/OutOfRangeRegexpRef:
1842
+ Description: 'Checks for out of range reference for Regexp because it always returns nil.'
1843
+ Enabled: true
1844
+ Safe: false
1845
+ VersionAdded: '0.89'
1846
+
1847
+ Lint/ParenthesesAsGroupedExpression:
1848
+ Description: >-
1849
+ Checks for method calls with a space before the opening
1850
+ parenthesis.
1851
+ StyleGuide: '#parens-no-spaces'
1852
+ Enabled: true
1853
+ VersionAdded: '0.12'
1854
+ VersionChanged: '0.83'
1855
+
1856
+ Lint/PercentStringArray:
1857
+ Description: >-
1858
+ Checks for unwanted commas and quotes in %w/%W literals.
1859
+ Enabled: true
1860
+ Safe: false
1861
+ VersionAdded: '0.41'
1862
+
1863
+ Lint/PercentSymbolArray:
1864
+ Description: >-
1865
+ Checks for unwanted commas and colons in %i/%I literals.
1866
+ Enabled: true
1867
+ VersionAdded: '0.41'
1868
+
1869
+ Lint/RaiseException:
1870
+ Description: Checks for `raise` or `fail` statements which are raising `Exception` class.
1871
+ StyleGuide: '#raise-exception'
1872
+ Enabled: true
1873
+ Safe: false
1874
+ VersionAdded: '0.81'
1875
+ VersionChanged: '0.86'
1876
+ AllowedImplicitNamespaces:
1877
+ - 'Gem'
1878
+
1879
+ Lint/RandOne:
1880
+ Description: >-
1881
+ Checks for `rand(1)` calls. Such calls always return `0`
1882
+ and most likely a mistake.
1883
+ Enabled: true
1884
+ VersionAdded: '0.36'
1885
+
1886
+ Lint/RedundantCopDisableDirective:
1887
+ Description: >-
1888
+ Checks for rubocop:disable comments that can be removed.
1889
+ Note: this cop is not disabled when disabling all cops.
1890
+ It must be explicitly disabled.
1891
+ Enabled: true
1892
+ VersionAdded: '0.76'
1893
+
1894
+ Lint/RedundantCopEnableDirective:
1895
+ Description: Checks for rubocop:enable comments that can be removed.
1896
+ Enabled: true
1897
+ VersionAdded: '0.76'
1898
+
1899
+ Lint/RedundantDirGlobSort:
1900
+ Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.'
1901
+ Enabled: pending
1902
+ VersionAdded: '1.8'
1903
+
1904
+ Lint/RedundantRequireStatement:
1905
+ Description: 'Checks for unnecessary `require` statement.'
1906
+ Enabled: true
1907
+ VersionAdded: '0.76'
1908
+
1909
+ Lint/RedundantSafeNavigation:
1910
+ Description: 'Checks for redundant safe navigation calls.'
1911
+ Enabled: true
1912
+ VersionAdded: '0.93'
1913
+ AllowedMethods:
1914
+ - instance_of?
1915
+ - kind_of?
1916
+ - is_a?
1917
+ - eql?
1918
+ - respond_to?
1919
+ - equal?
1920
+ Safe: false
1921
+
1922
+ Lint/RedundantSplatExpansion:
1923
+ Description: 'Checks for splat unnecessarily being called on literals.'
1924
+ Enabled: true
1925
+ VersionAdded: '0.76'
1926
+ VersionChanged: '1.7'
1927
+ AllowPercentLiteralArrayArgument: true
1928
+
1929
+ Lint/RedundantStringCoercion:
1930
+ Description: 'Checks for Object#to_s usage in string interpolation.'
1931
+ StyleGuide: '#no-to-s'
1932
+ Enabled: true
1933
+ VersionAdded: '0.19'
1934
+ VersionChanged: '0.77'
1935
+
1936
+ Lint/RedundantWithIndex:
1937
+ Description: 'Checks for redundant `with_index`.'
1938
+ Enabled: true
1939
+ VersionAdded: '0.50'
1940
+
1941
+ Lint/RedundantWithObject:
1942
+ Description: 'Checks for redundant `with_object`.'
1943
+ Enabled: true
1944
+ VersionAdded: '0.51'
1945
+
1946
+ Lint/RegexpAsCondition:
1947
+ Description: >-
1948
+ Do not use regexp literal as a condition.
1949
+ The regexp literal matches `$_` implicitly.
1950
+ Enabled: true
1951
+ VersionAdded: '0.51'
1952
+ VersionChanged: '0.86'
1953
+
1954
+ Lint/RequireParentheses:
1955
+ Description: >-
1956
+ Use parentheses in the method call to avoid confusion
1957
+ about precedence.
1958
+ Enabled: true
1959
+ VersionAdded: '0.18'
1960
+
1961
+ Lint/RescueException:
1962
+ Description: 'Avoid rescuing the Exception class.'
1963
+ StyleGuide: '#no-blind-rescues'
1964
+ Enabled: true
1965
+ VersionAdded: '0.9'
1966
+ VersionChanged: '0.27'
1967
+
1968
+ Lint/RescueType:
1969
+ Description: 'Avoid rescuing from non constants that could result in a `TypeError`.'
1970
+ Enabled: true
1971
+ VersionAdded: '0.49'
1972
+
1973
+ Lint/ReturnInVoidContext:
1974
+ Description: 'Checks for return in void context.'
1975
+ Enabled: true
1976
+ VersionAdded: '0.50'
1977
+
1978
+ Lint/SafeNavigationChain:
1979
+ Description: 'Do not chain ordinary method call after safe navigation operator.'
1980
+ Enabled: true
1981
+ VersionAdded: '0.47'
1982
+ VersionChanged: '0.77'
1983
+ AllowedMethods:
1984
+ - present?
1985
+ - blank?
1986
+ - presence
1987
+ - try
1988
+ - try!
1989
+ - in?
1990
+
1991
+ Lint/SafeNavigationConsistency:
1992
+ Description: >-
1993
+ Check to make sure that if safe navigation is used for a method
1994
+ call in an `&&` or `||` condition that safe navigation is used
1995
+ for all method calls on that same object.
1996
+ Enabled: true
1997
+ VersionAdded: '0.55'
1998
+ VersionChanged: '0.77'
1999
+ AllowedMethods:
2000
+ - present?
2001
+ - blank?
2002
+ - presence
2003
+ - try
2004
+ - try!
2005
+
2006
+ Lint/SafeNavigationWithEmpty:
2007
+ Description: 'Avoid `foo&.empty?` in conditionals.'
2008
+ Enabled: true
2009
+ VersionAdded: '0.62'
2010
+ VersionChanged: '0.87'
2011
+
2012
+ Lint/ScriptPermission:
2013
+ Description: 'Grant script file execute permission.'
2014
+ Enabled: true
2015
+ VersionAdded: '0.49'
2016
+ VersionChanged: '0.50'
2017
+
2018
+ Lint/SelfAssignment:
2019
+ Description: 'Checks for self-assignments.'
2020
+ Enabled: true
2021
+ VersionAdded: '0.89'
2022
+
2023
+ Lint/SendWithMixinArgument:
2024
+ Description: 'Checks for `send` method when using mixin.'
2025
+ Enabled: true
2026
+ VersionAdded: '0.75'
2027
+
2028
+ Lint/ShadowedArgument:
2029
+ Description: 'Avoid reassigning arguments before they were used.'
2030
+ Enabled: true
2031
+ VersionAdded: '0.52'
2032
+ IgnoreImplicitReferences: false
2033
+
2034
+
2035
+ Lint/ShadowedException:
2036
+ Description: >-
2037
+ Avoid rescuing a higher level exception
2038
+ before a lower level exception.
2039
+ Enabled: true
2040
+ VersionAdded: '0.41'
2041
+
2042
+ Lint/ShadowingOuterLocalVariable:
2043
+ Description: >-
2044
+ Do not use the same name as outer local variable
2045
+ for block arguments or block local variables.
2046
+ Enabled: true
2047
+ VersionAdded: '0.9'
2048
+
2049
+ Lint/StructNewOverride:
2050
+ Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.'
2051
+ Enabled: true
2052
+ VersionAdded: '0.81'
2053
+
2054
+ Lint/SuppressedException:
2055
+ Description: "Don't suppress exceptions."
2056
+ StyleGuide: '#dont-hide-exceptions'
2057
+ Enabled: true
2058
+ AllowComments: true
2059
+ VersionAdded: '0.9'
2060
+ VersionChanged: <<next>>
2061
+
2062
+ Lint/SymbolConversion:
2063
+ Description: 'Checks for unnecessary symbol conversions.'
2064
+ Enabled: pending
2065
+ VersionAdded: '1.9'
2066
+
2067
+ Lint/Syntax:
2068
+ Description: 'Checks for syntax errors.'
2069
+ Enabled: true
2070
+ VersionAdded: '0.9'
2071
+
2072
+ Lint/ToEnumArguments:
2073
+ Description: 'This cop ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
2074
+ Enabled: pending
2075
+ VersionAdded: '1.1'
2076
+
2077
+ Lint/ToJSON:
2078
+ Description: 'Ensure #to_json includes an optional argument.'
2079
+ Enabled: true
2080
+ VersionAdded: '0.66'
2081
+
2082
+ Lint/TopLevelReturnWithArgument:
2083
+ Description: 'This cop detects top level return statements with argument.'
2084
+ Enabled: true
2085
+ VersionAdded: '0.89'
2086
+
2087
+ Lint/TrailingCommaInAttributeDeclaration:
2088
+ Description: 'This cop checks for trailing commas in attribute declarations.'
2089
+ Enabled: true
2090
+ VersionAdded: '0.90'
2091
+
2092
+ Lint/TripleQuotes:
2093
+ Description: 'Checks for useless triple quote constructs.'
2094
+ Enabled: pending
2095
+ VersionAdded: '1.9'
2096
+
2097
+ Lint/UnderscorePrefixedVariableName:
2098
+ Description: 'Do not use prefix `_` for a variable that is used.'
2099
+ Enabled: true
2100
+ VersionAdded: '0.21'
2101
+ AllowKeywordBlockArguments: false
2102
+
2103
+ Lint/UnexpectedBlockArity:
2104
+ Description: 'Looks for blocks that have fewer arguments that the calling method expects.'
2105
+ Enabled: pending
2106
+ Safe: false
2107
+ VersionAdded: '1.5'
2108
+ Methods:
2109
+ chunk_while: 2
2110
+ each_with_index: 2
2111
+ each_with_object: 2
2112
+ inject: 2
2113
+ max: 2
2114
+ min: 2
2115
+ minmax: 2
2116
+ reduce: 2
2117
+ slice_when: 2
2118
+ sort: 2
2119
+
2120
+ Lint/UnifiedInteger:
2121
+ Description: 'Use Integer instead of Fixnum or Bignum.'
2122
+ Enabled: true
2123
+ VersionAdded: '0.43'
2124
+
2125
+ Lint/UnmodifiedReduceAccumulator:
2126
+ Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.
2127
+ Enabled: pending
2128
+ VersionAdded: '1.1'
2129
+ VersionChanged: '1.5'
2130
+
2131
+ Lint/UnreachableCode:
2132
+ Description: 'Unreachable code.'
2133
+ Enabled: true
2134
+ VersionAdded: '0.9'
2135
+
2136
+ Lint/UnreachableLoop:
2137
+ Description: 'This cop checks for loops that will have at most one iteration.'
2138
+ Enabled: true
2139
+ VersionAdded: '0.89'
2140
+ VersionChanged: '1.7'
2141
+ IgnoredPatterns:
2142
+ # RSpec uses `times` in its message expectations
2143
+ # eg. `exactly(2).times`
2144
+ - !ruby/regexp /(exactly|at_least|at_most)\(\d+\)\.times/
2145
+
2146
+ Lint/UnusedBlockArgument:
2147
+ Description: 'Checks for unused block arguments.'
2148
+ StyleGuide: '#underscore-unused-vars'
2149
+ Enabled: true
2150
+ VersionAdded: '0.21'
2151
+ VersionChanged: '0.22'
2152
+ IgnoreEmptyBlocks: true
2153
+ AllowUnusedKeywordArguments: false
2154
+
2155
+ Lint/UnusedMethodArgument:
2156
+ Description: 'Checks for unused method arguments.'
2157
+ StyleGuide: '#underscore-unused-vars'
2158
+ Enabled: true
2159
+ VersionAdded: '0.21'
2160
+ VersionChanged: '0.81'
2161
+ AllowUnusedKeywordArguments: false
2162
+ IgnoreEmptyMethods: true
2163
+ IgnoreNotImplementedMethods: true
2164
+
2165
+ Lint/UriEscapeUnescape:
2166
+ Description: >-
2167
+ `URI.escape` method is obsolete and should not be used. Instead, use
2168
+ `CGI.escape`, `URI.encode_www_form` or `URI.encode_www_form_component`
2169
+ depending on your specific use case.
2170
+ Also `URI.unescape` method is obsolete and should not be used. Instead, use
2171
+ `CGI.unescape`, `URI.decode_www_form` or `URI.decode_www_form_component`
2172
+ depending on your specific use case.
2173
+ Enabled: true
2174
+ VersionAdded: '0.50'
2175
+
2176
+ Lint/UriRegexp:
2177
+ Description: 'Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`.'
2178
+ Enabled: true
2179
+ VersionAdded: '0.50'
2180
+
2181
+ Lint/UselessAccessModifier:
2182
+ Description: 'Checks for useless access modifiers.'
2183
+ Enabled: true
2184
+ VersionAdded: '0.20'
2185
+ VersionChanged: '0.83'
2186
+ ContextCreatingMethods: []
2187
+ MethodCreatingMethods: []
2188
+
2189
+ Lint/UselessAssignment:
2190
+ Description: 'Checks for useless assignment to a local variable.'
2191
+ StyleGuide: '#underscore-unused-vars'
2192
+ Enabled: true
2193
+ VersionAdded: '0.11'
2194
+
2195
+ Lint/UselessElseWithoutRescue:
2196
+ Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
2197
+ Enabled: true
2198
+ VersionAdded: '0.17'
2199
+
2200
+ Lint/UselessMethodDefinition:
2201
+ Description: 'Checks for useless method definitions.'
2202
+ Enabled: true
2203
+ VersionAdded: '0.90'
2204
+ Safe: false
2205
+ AllowComments: true
2206
+
2207
+ Lint/UselessSetterCall:
2208
+ Description: 'Checks for useless setter call to a local variable.'
2209
+ Enabled: true
2210
+ SafeAutoCorrect: false
2211
+ VersionAdded: '0.13'
2212
+ VersionChanged: '1.2'
2213
+ Safe: false
2214
+
2215
+ Lint/UselessTimes:
2216
+ Description: 'Checks for useless `Integer#times` calls.'
2217
+ Enabled: true
2218
+ VersionAdded: '0.91'
2219
+ Safe: false
2220
+
2221
+ Lint/Void:
2222
+ Description: 'Possible use of operator/literal/variable in void context.'
2223
+ Enabled: true
2224
+ VersionAdded: '0.9'
2225
+ CheckForMethodsWithNoSideEffects: false
2226
+
2227
+ #################### Metrics ###############################
2228
+
2229
+ Metrics/AbcSize:
2230
+ Description: >-
2231
+ A calculated magnitude based on number of assignments,
2232
+ branches, and conditions.
2233
+ Reference:
2234
+ - http://c2.com/cgi/wiki?AbcMetric
2235
+ - https://en.wikipedia.org/wiki/ABC_Software_Metric
2236
+ Enabled: true
2237
+ VersionAdded: '0.27'
2238
+ VersionChanged: '1.5'
2239
+ # The ABC size is a calculated magnitude, so this number can be an Integer or
2240
+ # a Float.
2241
+ IgnoredMethods: []
2242
+ CountRepeatedAttributes: true
2243
+ Max: 17
2244
+
2245
+ Metrics/BlockLength:
2246
+ Description: 'Avoid long blocks with many lines.'
2247
+ Enabled: true
2248
+ VersionAdded: '0.44'
2249
+ VersionChanged: '1.5'
2250
+ CountComments: false # count full line comments?
2251
+ Max: 25
2252
+ CountAsOne: []
2253
+ IgnoredMethods:
2254
+ # By default, exclude the `#refine` method, as it tends to have larger
2255
+ # associated blocks.
2256
+ - refine
2257
+ Exclude:
2258
+ - '**/*.gemspec'
2259
+ - '**/*_spec.rb'
2260
+
2261
+ Metrics/BlockNesting:
2262
+ Description: 'Avoid excessive block nesting.'
2263
+ StyleGuide: '#three-is-the-number-thou-shalt-count'
2264
+ Enabled: true
2265
+ VersionAdded: '0.25'
2266
+ VersionChanged: '0.47'
2267
+ CountBlocks: false
2268
+ Max: 3
2269
+
2270
+ Metrics/ClassLength:
2271
+ Description: 'Avoid classes longer than 100 lines of code.'
2272
+ Enabled: true
2273
+ VersionAdded: '0.25'
2274
+ VersionChanged: '0.87'
2275
+ CountComments: false # count full line comments?
2276
+ Max: 100
2277
+ CountAsOne: []
2278
+
2279
+ # Avoid complex methods.
2280
+ Metrics/CyclomaticComplexity:
2281
+ Description: >-
2282
+ A complexity metric that is strongly correlated to the number
2283
+ of test cases needed to validate a method.
2284
+ Enabled: true
2285
+ VersionAdded: '0.25'
2286
+ VersionChanged: '0.81'
2287
+ IgnoredMethods: []
2288
+ Max: 7
2289
+
2290
+ Metrics/MethodLength:
2291
+ Description: 'Avoid methods longer than 10 lines of code.'
2292
+ StyleGuide: '#short-methods'
2293
+ Enabled: true
2294
+ VersionAdded: '0.25'
2295
+ VersionChanged: '1.5'
2296
+ CountComments: false # count full line comments?
2297
+ Max: 10
2298
+ CountAsOne: []
2299
+ IgnoredMethods: []
2300
+
2301
+ Metrics/ModuleLength:
2302
+ Description: 'Avoid modules longer than 100 lines of code.'
2303
+ Enabled: true
2304
+ VersionAdded: '0.31'
2305
+ VersionChanged: '0.87'
2306
+ CountComments: false # count full line comments?
2307
+ Max: 100
2308
+ CountAsOne: []
2309
+ Exclude:
2310
+ - '**/*_spec.rb'
2311
+
2312
+ Metrics/ParameterLists:
2313
+ Description: 'Avoid parameter lists longer than three or four parameters.'
2314
+ StyleGuide: '#too-many-params'
2315
+ Enabled: true
2316
+ VersionAdded: '0.25'
2317
+ VersionChanged: '1.5'
2318
+ Max: 5
2319
+ CountKeywordArgs: true
2320
+ MaxOptionalParameters: 3
2321
+
2322
+ Metrics/PerceivedComplexity:
2323
+ Description: >-
2324
+ A complexity metric geared towards measuring complexity for a
2325
+ human reader.
2326
+ Enabled: true
2327
+ VersionAdded: '0.25'
2328
+ VersionChanged: '0.81'
2329
+ IgnoredMethods: []
2330
+ Max: 8
2331
+
2332
+ ################## Migration #############################
2333
+
2334
+ Migration/DepartmentName:
2335
+ Description: >-
2336
+ Check that cop names in rubocop:disable (etc) comments are
2337
+ given with department name.
2338
+ Enabled: true
2339
+ VersionAdded: '0.75'
2340
+
2341
+ #################### Naming ##############################
2342
+
2343
+ Naming/AccessorMethodName:
2344
+ Description: Check the naming of accessor methods for get_/set_.
2345
+ StyleGuide: '#accessor_mutator_method_names'
2346
+ Enabled: true
2347
+ VersionAdded: '0.50'
2348
+
2349
+ Naming/AsciiIdentifiers:
2350
+ Description: 'Use only ascii symbols in identifiers and constants.'
2351
+ StyleGuide: '#english-identifiers'
2352
+ Enabled: true
2353
+ VersionAdded: '0.50'
2354
+ VersionChanged: '0.87'
2355
+ AsciiConstants: true
2356
+
2357
+ Naming/BinaryOperatorParameterName:
2358
+ Description: 'When defining binary operators, name the argument other.'
2359
+ StyleGuide: '#other-arg'
2360
+ Enabled: true
2361
+ VersionAdded: '0.50'
2362
+ VersionChanged: '1.2'
2363
+
2364
+ Naming/BlockParameterName:
2365
+ Description: >-
2366
+ Checks for block parameter names that contain capital letters,
2367
+ end in numbers, or do not meet a minimal length.
2368
+ Enabled: true
2369
+ VersionAdded: '0.53'
2370
+ VersionChanged: '0.77'
2371
+ # Parameter names may be equal to or greater than this value
2372
+ MinNameLength: 1
2373
+ AllowNamesEndingInNumbers: true
2374
+ # Allowed names that will not register an offense
2375
+ AllowedNames: []
2376
+ # Forbidden names that will register an offense
2377
+ ForbiddenNames: []
2378
+
2379
+ Naming/ClassAndModuleCamelCase:
2380
+ Description: 'Use CamelCase for classes and modules.'
2381
+ StyleGuide: '#camelcase-classes'
2382
+ Enabled: true
2383
+ VersionAdded: '0.50'
2384
+ VersionChanged: '0.85'
2385
+ # Allowed class/module names can be specified here.
2386
+ # These can be full or part of the name.
2387
+ AllowedNames:
2388
+ - module_parent
2389
+
2390
+ Naming/ConstantName:
2391
+ Description: 'Constants should use SCREAMING_SNAKE_CASE.'
2392
+ StyleGuide: '#screaming-snake-case'
2393
+ Enabled: true
2394
+ VersionAdded: '0.50'
2395
+
2396
+ Naming/FileName:
2397
+ Description: 'Use snake_case for source file names.'
2398
+ StyleGuide: '#snake-case-files'
2399
+ Enabled: true
2400
+ VersionAdded: '0.50'
2401
+ # Camel case file names listed in `AllCops:Include` and all file names listed
2402
+ # in `AllCops:Exclude` are excluded by default. Add extra excludes here.
2403
+ Exclude: []
2404
+ # When `true`, requires that each source file should define a class or module
2405
+ # with a name which matches the file name (converted to ... case).
2406
+ # It further expects it to be nested inside modules which match the names
2407
+ # of subdirectories in its path.
2408
+ ExpectMatchingDefinition: false
2409
+ # When `false`, changes the behavior of ExpectMatchingDefinition to match only
2410
+ # whether each source file's class or module name matches the file name --
2411
+ # not whether the nested module hierarchy matches the subdirectory path.
2412
+ CheckDefinitionPathHierarchy: true
2413
+ # If non-`nil`, expect all source file names to match the following regex.
2414
+ # Only the file name itself is matched, not the entire file path.
2415
+ # Use anchors as necessary if you want to match the entire name rather than
2416
+ # just a part of it.
2417
+ Regex: ~
2418
+ # With `IgnoreExecutableScripts` set to `true`, this cop does not
2419
+ # report offending filenames for executable scripts (i.e. source
2420
+ # files with a shebang in the first line).
2421
+ IgnoreExecutableScripts: true
2422
+ AllowedAcronyms:
2423
+ - CLI
2424
+ - DSL
2425
+ - ACL
2426
+ - API
2427
+ - ASCII
2428
+ - CPU
2429
+ - CSS
2430
+ - DNS
2431
+ - EOF
2432
+ - GUID
2433
+ - HTML
2434
+ - HTTP
2435
+ - HTTPS
2436
+ - ID
2437
+ - IP
2438
+ - JSON
2439
+ - LHS
2440
+ - QPS
2441
+ - RAM
2442
+ - RHS
2443
+ - RPC
2444
+ - SLA
2445
+ - SMTP
2446
+ - SQL
2447
+ - SSH
2448
+ - TCP
2449
+ - TLS
2450
+ - TTL
2451
+ - UDP
2452
+ - UI
2453
+ - UID
2454
+ - UUID
2455
+ - URI
2456
+ - URL
2457
+ - UTF8
2458
+ - VM
2459
+ - XML
2460
+ - XMPP
2461
+ - XSRF
2462
+ - XSS
2463
+
2464
+ Naming/HeredocDelimiterCase:
2465
+ Description: 'Use configured case for heredoc delimiters.'
2466
+ StyleGuide: '#heredoc-delimiters'
2467
+ Enabled: true
2468
+ VersionAdded: '0.50'
2469
+ VersionChanged: '1.2'
2470
+ EnforcedStyle: uppercase
2471
+ SupportedStyles:
2472
+ - lowercase
2473
+ - uppercase
2474
+
2475
+ Naming/HeredocDelimiterNaming:
2476
+ Description: 'Use descriptive heredoc delimiters.'
2477
+ StyleGuide: '#heredoc-delimiters'
2478
+ Enabled: true
2479
+ VersionAdded: '0.50'
2480
+ ForbiddenDelimiters:
2481
+ - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/'
2482
+
2483
+ Naming/MemoizedInstanceVariableName:
2484
+ Description: >-
2485
+ Memoized method name should match memo instance variable name.
2486
+ Enabled: true
2487
+ VersionAdded: '0.53'
2488
+ VersionChanged: '1.2'
2489
+ EnforcedStyleForLeadingUnderscores: disallowed
2490
+ SupportedStylesForLeadingUnderscores:
2491
+ - disallowed
2492
+ - required
2493
+ - optional
2494
+
2495
+ Naming/MethodName:
2496
+ Description: 'Use the configured style when naming methods.'
2497
+ StyleGuide: '#snake-case-symbols-methods-vars'
2498
+ Enabled: true
2499
+ VersionAdded: '0.50'
2500
+ EnforcedStyle: snake_case
2501
+ SupportedStyles:
2502
+ - snake_case
2503
+ - camelCase
2504
+ # Method names matching patterns are always allowed.
2505
+ #
2506
+ # IgnoredPatterns:
2507
+ # - '\A\s*onSelectionBulkChange\s*'
2508
+ # - '\A\s*onSelectionCleared\s*'
2509
+ #
2510
+ IgnoredPatterns: []
2511
+
2512
+ Naming/MethodParameterName:
2513
+ Description: >-
2514
+ Checks for method parameter names that contain capital letters,
2515
+ end in numbers, or do not meet a minimal length.
2516
+ Enabled: true
2517
+ VersionAdded: '0.53'
2518
+ VersionChanged: '0.77'
2519
+ # Parameter names may be equal to or greater than this value
2520
+ MinNameLength: 3
2521
+ AllowNamesEndingInNumbers: true
2522
+ # Allowed names that will not register an offense
2523
+ AllowedNames:
2524
+ - at
2525
+ - by
2526
+ - db
2527
+ - id
2528
+ - in
2529
+ - io
2530
+ - ip
2531
+ - of
2532
+ - 'on'
2533
+ - os
2534
+ - pp
2535
+ - to
2536
+ # Forbidden names that will register an offense
2537
+ ForbiddenNames: []
2538
+
2539
+ Naming/PredicateName:
2540
+ Description: 'Check the names of predicate methods.'
2541
+ StyleGuide: '#bool-methods-qmark'
2542
+ Enabled: true
2543
+ VersionAdded: '0.50'
2544
+ VersionChanged: '0.77'
2545
+ # Predicate name prefixes.
2546
+ NamePrefix:
2547
+ - is_
2548
+ - has_
2549
+ - have_
2550
+ # Predicate name prefixes that should be removed.
2551
+ ForbiddenPrefixes:
2552
+ - is_
2553
+ - has_
2554
+ - have_
2555
+ # Predicate names which, despite having a forbidden prefix, or no `?`,
2556
+ # should still be accepted
2557
+ AllowedMethods:
2558
+ - is_a?
2559
+ # Method definition macros for dynamically generated methods.
2560
+ MethodDefinitionMacros:
2561
+ - define_method
2562
+ - define_singleton_method
2563
+ # Exclude Rspec specs because there is a strong convention to write spec
2564
+ # helpers in the form of `have_something` or `be_something`.
2565
+ Exclude:
2566
+ - 'spec/**/*'
2567
+
2568
+ Naming/RescuedExceptionsVariableName:
2569
+ Description: 'Use consistent rescued exceptions variables naming.'
2570
+ Enabled: true
2571
+ VersionAdded: '0.67'
2572
+ VersionChanged: '0.68'
2573
+ PreferredName: e
2574
+
2575
+ Naming/VariableName:
2576
+ Description: 'Use the configured style when naming variables.'
2577
+ StyleGuide: '#snake-case-symbols-methods-vars'
2578
+ Enabled: true
2579
+ VersionAdded: '0.50'
2580
+ VersionChanged: '1.8'
2581
+ EnforcedStyle: snake_case
2582
+ SupportedStyles:
2583
+ - snake_case
2584
+ - camelCase
2585
+ AllowedIdentifiers: []
2586
+
2587
+ Naming/VariableNumber:
2588
+ Description: 'Use the configured style when numbering symbols, methods and variables.'
2589
+ StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
2590
+ Enabled: true
2591
+ VersionAdded: '0.50'
2592
+ VersionChanged: '1.4'
2593
+ EnforcedStyle: normalcase
2594
+ SupportedStyles:
2595
+ - snake_case
2596
+ - normalcase
2597
+ - non_integer
2598
+ CheckMethodNames: true
2599
+ CheckSymbols: true
2600
+ AllowedIdentifiers:
2601
+ - capture3 # Open3.capture3
2602
+ - iso8601 # Time#iso8601
2603
+ - rfc1123_date # CGI.rfc1123_date
2604
+ - rfc822 # Time#rfc822
2605
+ - rfc2822 # Time#rfc2822
2606
+ - rfc3339 # DateTime.rfc3339
2607
+
2608
+ #################### Security ##############################
2609
+
2610
+ Security/Eval:
2611
+ Description: 'The use of eval represents a serious security risk.'
2612
+ Enabled: true
2613
+ VersionAdded: '0.47'
2614
+
2615
+ Security/JSONLoad:
2616
+ Description: >-
2617
+ Prefer usage of `JSON.parse` over `JSON.load` due to potential
2618
+ security issues. See reference for more information.
2619
+ Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load'
2620
+ Enabled: true
2621
+ VersionAdded: '0.43'
2622
+ VersionChanged: '0.44'
2623
+ # Autocorrect here will change to a method that may cause crashes depending
2624
+ # on the value of the argument.
2625
+ AutoCorrect: false
2626
+ SafeAutoCorrect: false
2627
+
2628
+ Security/MarshalLoad:
2629
+ Description: >-
2630
+ Avoid using of `Marshal.load` or `Marshal.restore` due to potential
2631
+ security issues. See reference for more information.
2632
+ Reference: 'https://ruby-doc.org/core-2.7.0/Marshal.html#module-Marshal-label-Security+considerations'
2633
+ Enabled: true
2634
+ VersionAdded: '0.47'
2635
+
2636
+ Security/Open:
2637
+ Description: 'The use of `Kernel#open` and `URI.open` represent a serious security risk.'
2638
+ Enabled: true
2639
+ VersionAdded: '0.53'
2640
+ VersionChanged: '1.0'
2641
+ Safe: false
2642
+
2643
+ Security/YAMLLoad:
2644
+ Description: >-
2645
+ Prefer usage of `YAML.safe_load` over `YAML.load` due to potential
2646
+ security issues. See reference for more information.
2647
+ Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security'
2648
+ Enabled: true
2649
+ VersionAdded: '0.47'
2650
+ SafeAutoCorrect: false
2651
+
2652
+ #################### Style ###############################
2653
+
2654
+ Style/AccessModifierDeclarations:
2655
+ Description: 'Checks style of how access modifiers are used.'
2656
+ Enabled: true
2657
+ VersionAdded: '0.57'
2658
+ VersionChanged: '0.81'
2659
+ EnforcedStyle: group
2660
+ SupportedStyles:
2661
+ - inline
2662
+ - group
2663
+ AllowModifiersOnSymbols: true
2664
+
2665
+ Style/AccessorGrouping:
2666
+ Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
2667
+ Enabled: true
2668
+ VersionAdded: '0.87'
2669
+ EnforcedStyle: grouped
2670
+ SupportedStyles:
2671
+ # separated: each accessor goes in a separate statement.
2672
+ # grouped: accessors are grouped into a single statement.
2673
+ - separated
2674
+ - grouped
2675
+
2676
+ Style/Alias:
2677
+ Description: 'Use alias instead of alias_method.'
2678
+ StyleGuide: '#alias-method-lexically'
2679
+ Enabled: true
2680
+ VersionAdded: '0.9'
2681
+ VersionChanged: '0.36'
2682
+ EnforcedStyle: prefer_alias
2683
+ SupportedStyles:
2684
+ - prefer_alias
2685
+ - prefer_alias_method
2686
+
2687
+ Style/AndOr:
2688
+ Description: 'Use &&/|| instead of and/or.'
2689
+ StyleGuide: '#no-and-or-or'
2690
+ Enabled: true
2691
+ VersionAdded: '0.9'
2692
+ VersionChanged: '0.25'
2693
+ # Whether `and` and `or` are banned only in conditionals (conditionals)
2694
+ # or completely (always).
2695
+ EnforcedStyle: conditionals
2696
+ SupportedStyles:
2697
+ - always
2698
+ - conditionals
2699
+
2700
+ Style/ArgumentsForwarding:
2701
+ Description: 'Use arguments forwarding.'
2702
+ StyleGuide: '#arguments-forwarding'
2703
+ Enabled: pending
2704
+ AllowOnlyRestArgument: true
2705
+ VersionAdded: '1.1'
2706
+
2707
+ Style/ArrayCoercion:
2708
+ Description: >-
2709
+ Use Array() instead of explicit Array check or [*var], when dealing
2710
+ with a variable you want to treat as an Array, but you're not certain it's an array.
2711
+ StyleGuide: '#array-coercion'
2712
+ Safe: false
2713
+ Enabled: false
2714
+ VersionAdded: '0.88'
2715
+
2716
+ Style/ArrayJoin:
2717
+ Description: 'Use Array#join instead of Array#*.'
2718
+ StyleGuide: '#array-join'
2719
+ Enabled: true
2720
+ VersionAdded: '0.20'
2721
+ VersionChanged: '0.31'
2722
+
2723
+ Style/AsciiComments:
2724
+ Description: 'Use only ascii symbols in comments.'
2725
+ StyleGuide: '#english-comments'
2726
+ Enabled: true
2727
+ VersionAdded: '0.9'
2728
+ VersionChanged: '0.52'
2729
+ AllowedChars:
2730
+ - ©
2731
+
2732
+ Style/Attr:
2733
+ Description: 'Checks for uses of Module#attr.'
2734
+ StyleGuide: '#attr'
2735
+ Enabled: true
2736
+ VersionAdded: '0.9'
2737
+ VersionChanged: '0.12'
2738
+
2739
+ Style/AutoResourceCleanup:
2740
+ Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
2741
+ Enabled: false
2742
+ VersionAdded: '0.30'
2743
+
2744
+ Style/BarePercentLiterals:
2745
+ Description: 'Checks if usage of %() or %Q() matches configuration.'
2746
+ StyleGuide: '#percent-q-shorthand'
2747
+ Enabled: true
2748
+ VersionAdded: '0.25'
2749
+ EnforcedStyle: bare_percent
2750
+ SupportedStyles:
2751
+ - percent_q
2752
+ - bare_percent
2753
+
2754
+ Style/BeginBlock:
2755
+ Description: 'Avoid the use of BEGIN blocks.'
2756
+ StyleGuide: '#no-BEGIN-blocks'
2757
+ Enabled: true
2758
+ VersionAdded: '0.9'
2759
+
2760
+ Style/BisectedAttrAccessor:
2761
+ Description: >-
2762
+ Checks for places where `attr_reader` and `attr_writer`
2763
+ for the same method can be combined into single `attr_accessor`.
2764
+ Enabled: true
2765
+ VersionAdded: '0.87'
2766
+
2767
+ Style/BlockComments:
2768
+ Description: 'Do not use block comments.'
2769
+ StyleGuide: '#no-block-comments'
2770
+ Enabled: true
2771
+ VersionAdded: '0.9'
2772
+ VersionChanged: '0.23'
2773
+
2774
+ Style/BlockDelimiters:
2775
+ Description: >-
2776
+ Avoid using {...} for multi-line blocks (multiline chaining is
2777
+ always ugly).
2778
+ Prefer {...} over do...end for single-line blocks.
2779
+ StyleGuide: '#single-line-blocks'
2780
+ Enabled: true
2781
+ VersionAdded: '0.30'
2782
+ VersionChanged: '0.35'
2783
+ EnforcedStyle: line_count_based
2784
+ SupportedStyles:
2785
+ # The `line_count_based` style enforces braces around single line blocks and
2786
+ # do..end around multi-line blocks.
2787
+ - line_count_based
2788
+ # The `semantic` style enforces braces around functional blocks, where the
2789
+ # primary purpose of the block is to return a value and do..end for
2790
+ # multi-line procedural blocks, where the primary purpose of the block is
2791
+ # its side-effects. Single-line procedural blocks may only use do-end,
2792
+ # unless AllowBracesOnProceduralOneLiners has a truthy value (see below).
2793
+ #
2794
+ # This looks at the usage of a block's method to determine its type (e.g. is
2795
+ # the result of a `map` assigned to a variable or passed to another
2796
+ # method) but exceptions are permitted in the `ProceduralMethods`,
2797
+ # `FunctionalMethods` and `IgnoredMethods` sections below.
2798
+ - semantic
2799
+ # The `braces_for_chaining` style enforces braces around single line blocks
2800
+ # and do..end around multi-line blocks, except for multi-line blocks whose
2801
+ # return value is being chained with another method (in which case braces
2802
+ # are enforced).
2803
+ - braces_for_chaining
2804
+ # The `always_braces` style always enforces braces.
2805
+ - always_braces
2806
+ ProceduralMethods:
2807
+ # Methods that are known to be procedural in nature but look functional from
2808
+ # their usage, e.g.
2809
+ #
2810
+ # time = Benchmark.realtime do
2811
+ # foo.bar
2812
+ # end
2813
+ #
2814
+ # Here, the return value of the block is discarded but the return value of
2815
+ # `Benchmark.realtime` is used.
2816
+ - benchmark
2817
+ - bm
2818
+ - bmbm
2819
+ - create
2820
+ - each_with_object
2821
+ - measure
2822
+ - new
2823
+ - realtime
2824
+ - tap
2825
+ - with_object
2826
+ FunctionalMethods:
2827
+ # Methods that are known to be functional in nature but look procedural from
2828
+ # their usage, e.g.
2829
+ #
2830
+ # let(:foo) { Foo.new }
2831
+ #
2832
+ # Here, the return value of `Foo.new` is used to define a `foo` helper but
2833
+ # doesn't appear to be used from the return value of `let`.
2834
+ - let
2835
+ - let!
2836
+ - subject
2837
+ - watch
2838
+ IgnoredMethods:
2839
+ # Methods that can be either procedural or functional and cannot be
2840
+ # categorised from their usage alone, e.g.
2841
+ #
2842
+ # foo = lambda do |x|
2843
+ # puts "Hello, #{x}"
2844
+ # end
2845
+ #
2846
+ # foo = lambda do |x|
2847
+ # x * 100
2848
+ # end
2849
+ #
2850
+ # Here, it is impossible to tell from the return value of `lambda` whether
2851
+ # the inner block's return value is significant.
2852
+ - lambda
2853
+ - proc
2854
+ - it
2855
+ # The AllowBracesOnProceduralOneLiners option is ignored unless the
2856
+ # EnforcedStyle is set to `semantic`. If so:
2857
+ #
2858
+ # If AllowBracesOnProceduralOneLiners is unspecified, or set to any
2859
+ # falsey value, then semantic purity is maintained, so one-line
2860
+ # procedural blocks must use do-end, not braces.
2861
+ #
2862
+ # # bad
2863
+ # collection.each { |element| puts element }
2864
+ #
2865
+ # # good
2866
+ # collection.each do |element| puts element end
2867
+ #
2868
+ # If AllowBracesOnProceduralOneLiners is set to any truthy value,
2869
+ # then one-line procedural blocks may use either style.
2870
+ #
2871
+ # # good
2872
+ # collection.each { |element| puts element }
2873
+ #
2874
+ # # also good
2875
+ # collection.each do |element| puts element end
2876
+ AllowBracesOnProceduralOneLiners: false
2877
+ # The BracesRequiredMethods overrides all other configurations except
2878
+ # IgnoredMethods. It can be used to enforce that all blocks for specific
2879
+ # methods use braces. For example, you can use this to enforce Sorbet
2880
+ # signatures use braces even when the rest of your codebase enforces
2881
+ # the `line_count_based` style.
2882
+ BracesRequiredMethods: []
2883
+
2884
+ Style/CaseEquality:
2885
+ Description: 'Avoid explicit use of the case equality operator(===).'
2886
+ StyleGuide: '#no-case-equality'
2887
+ Enabled: true
2888
+ VersionAdded: '0.9'
2889
+ VersionChanged: '0.89'
2890
+ # If AllowOnConstant is enabled, the cop will ignore violations when the receiver of
2891
+ # the case equality operator is a constant.
2892
+ #
2893
+ # # bad
2894
+ # /string/ === "string"
2895
+ #
2896
+ # # good
2897
+ # String === "string"
2898
+ AllowOnConstant: false
2899
+
2900
+ Style/CaseLikeIf:
2901
+ Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
2902
+ StyleGuide: '#case-vs-if-else'
2903
+ Enabled: true
2904
+ Safe: false
2905
+ VersionAdded: '0.88'
2906
+
2907
+ Style/CharacterLiteral:
2908
+ Description: 'Checks for uses of character literals.'
2909
+ StyleGuide: '#no-character-literals'
2910
+ Enabled: true
2911
+ VersionAdded: '0.9'
2912
+
2913
+ Style/ClassAndModuleChildren:
2914
+ Description: 'Checks style of children classes and modules.'
2915
+ StyleGuide: '#namespace-definition'
2916
+ # Moving from compact to nested children requires knowledge of whether the
2917
+ # outer parent is a module or a class. Moving from nested to compact requires
2918
+ # verification that the outer parent is defined elsewhere. Rubocop does not
2919
+ # have the knowledge to perform either operation safely and thus requires
2920
+ # manual oversight.
2921
+ SafeAutoCorrect: false
2922
+ Enabled: true
2923
+ VersionAdded: '0.19'
2924
+ #
2925
+ # Basically there are two different styles:
2926
+ #
2927
+ # `nested` - have each child on a separate line
2928
+ # class Foo
2929
+ # class Bar
2930
+ # end
2931
+ # end
2932
+ #
2933
+ # `compact` - combine definitions as much as possible
2934
+ # class Foo::Bar
2935
+ # end
2936
+ #
2937
+ # The compact style is only forced, for classes or modules with one child.
2938
+ EnforcedStyle: nested
2939
+ SupportedStyles:
2940
+ - nested
2941
+ - compact
2942
+
2943
+ Style/ClassCheck:
2944
+ Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.'
2945
+ StyleGuide: '#is-a-vs-kind-of'
2946
+ Enabled: true
2947
+ VersionAdded: '0.24'
2948
+ EnforcedStyle: is_a?
2949
+ SupportedStyles:
2950
+ - is_a?
2951
+ - kind_of?
2952
+
2953
+ Style/ClassEqualityComparison:
2954
+ Description: 'Enforces the use of `Object#instance_of?` instead of class comparison for equality.'
2955
+ StyleGuide: '#instance-of-vs-class-comparison'
2956
+ Enabled: true
2957
+ VersionAdded: '0.93'
2958
+ IgnoredMethods:
2959
+ - ==
2960
+ - equal?
2961
+ - eql?
2962
+
2963
+ Style/ClassMethods:
2964
+ Description: 'Use self when defining module/class methods.'
2965
+ StyleGuide: '#def-self-class-methods'
2966
+ Enabled: true
2967
+ VersionAdded: '0.9'
2968
+ VersionChanged: '0.20'
2969
+
2970
+ Style/ClassMethodsDefinitions:
2971
+ Description: 'Enforces using `def self.method_name` or `class << self` to define class methods.'
2972
+ StyleGuide: '#def-self-class-methods'
2973
+ Enabled: false
2974
+ VersionAdded: '0.89'
2975
+ EnforcedStyle: def_self
2976
+ SupportedStyles:
2977
+ - def_self
2978
+ - self_class
2979
+
2980
+ Style/ClassVars:
2981
+ Description: 'Avoid the use of class variables.'
2982
+ StyleGuide: '#no-class-vars'
2983
+ Enabled: true
2984
+ VersionAdded: '0.13'
2985
+
2986
+ Style/CollectionCompact:
2987
+ Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.'
2988
+ Enabled: pending
2989
+ Safe: false
2990
+ VersionAdded: '1.2'
2991
+ VersionChanged: '1.3'
2992
+
2993
+ # Align with the style guide.
2994
+ Style/CollectionMethods:
2995
+ Description: 'Preferred collection methods.'
2996
+ StyleGuide: '#map-find-select-reduce-include-size'
2997
+ Enabled: false
2998
+ VersionAdded: '0.9'
2999
+ VersionChanged: '1.7'
3000
+ Safe: false
3001
+ # Mapping from undesired method to desired method
3002
+ # e.g. to use `detect` over `find`:
3003
+ #
3004
+ # Style/CollectionMethods:
3005
+ # PreferredMethods:
3006
+ # find: detect
3007
+ PreferredMethods:
3008
+ collect: 'map'
3009
+ collect!: 'map!'
3010
+ inject: 'reduce'
3011
+ detect: 'find'
3012
+ find_all: 'select'
3013
+ member?: 'include?'
3014
+ # Methods in this array accept a final symbol as an implicit block
3015
+ # eg. `inject(:+)`
3016
+ MethodsAcceptingSymbol:
3017
+ - inject
3018
+ - reduce
3019
+
3020
+ Style/ColonMethodCall:
3021
+ Description: 'Do not use :: for method call.'
3022
+ StyleGuide: '#double-colons'
3023
+ Enabled: true
3024
+ VersionAdded: '0.9'
3025
+
3026
+ Style/ColonMethodDefinition:
3027
+ Description: 'Do not use :: for defining class methods.'
3028
+ StyleGuide: '#colon-method-definition'
3029
+ Enabled: true
3030
+ VersionAdded: '0.52'
3031
+
3032
+ Style/CombinableLoops:
3033
+ Description: >-
3034
+ Checks for places where multiple consecutive loops over the same data
3035
+ can be combined into a single loop.
3036
+ Enabled: true
3037
+ Safe: false
3038
+ VersionAdded: '0.90'
3039
+
3040
+ Style/CommandLiteral:
3041
+ Description: 'Use `` or %x around command literals.'
3042
+ StyleGuide: '#percent-x'
3043
+ Enabled: true
3044
+ VersionAdded: '0.30'
3045
+ EnforcedStyle: backticks
3046
+ # backticks: Always use backticks.
3047
+ # percent_x: Always use `%x`.
3048
+ # mixed: Use backticks on single-line commands, and `%x` on multi-line commands.
3049
+ SupportedStyles:
3050
+ - backticks
3051
+ - percent_x
3052
+ - mixed
3053
+ # If `false`, the cop will always recommend using `%x` if one or more backticks
3054
+ # are found in the command string.
3055
+ AllowInnerBackticks: false
3056
+
3057
+ # Checks formatting of special comments
3058
+ Style/CommentAnnotation:
3059
+ Description: >-
3060
+ Checks formatting of special comments
3061
+ (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE).
3062
+ StyleGuide: '#annotate-keywords'
3063
+ Enabled: true
3064
+ VersionAdded: '0.10'
3065
+ VersionChanged: '1.3'
3066
+ Keywords:
3067
+ - TODO
3068
+ - FIXME
3069
+ - OPTIMIZE
3070
+ - HACK
3071
+ - REVIEW
3072
+ - NOTE
3073
+
3074
+ Style/CommentedKeyword:
3075
+ Description: 'Do not place comments on the same line as certain keywords.'
3076
+ Enabled: true
3077
+ VersionAdded: '0.51'
3078
+ VersionChanged: '1.7'
3079
+
3080
+ Style/ConditionalAssignment:
3081
+ Description: >-
3082
+ Use the return value of `if` and `case` statements for
3083
+ assignment to a variable and variable comparison instead
3084
+ of assigning that variable inside of each branch.
3085
+ Enabled: true
3086
+ VersionAdded: '0.36'
3087
+ VersionChanged: '0.47'
3088
+ EnforcedStyle: assign_to_condition
3089
+ SupportedStyles:
3090
+ - assign_to_condition
3091
+ - assign_inside_condition
3092
+ # When configured to `assign_to_condition`, `SingleLineConditionsOnly`
3093
+ # will only register an offense when all branches of a condition are
3094
+ # a single line.
3095
+ # When configured to `assign_inside_condition`, `SingleLineConditionsOnly`
3096
+ # will only register an offense for assignment to a condition that has
3097
+ # at least one multiline branch.
3098
+ SingleLineConditionsOnly: true
3099
+ IncludeTernaryExpressions: true
3100
+
3101
+ Style/ConstantVisibility:
3102
+ Description: >-
3103
+ Check that class- and module constants have
3104
+ visibility declarations.
3105
+ Enabled: false
3106
+ VersionAdded: '0.66'
3107
+ VersionChanged: '1.10'
3108
+ IgnoreModules: false
3109
+
3110
+ # Checks that you have put a copyright in a comment before any code.
3111
+ #
3112
+ # You can override the default Notice in your .rubocop.yml file.
3113
+ #
3114
+ # In order to use autocorrect, you must supply a value for the
3115
+ # `AutocorrectNotice` key that matches the regexp Notice. A blank
3116
+ # `AutocorrectNotice` will cause an error during autocorrect.
3117
+ #
3118
+ # Autocorrect will add a copyright notice in a comment at the top
3119
+ # of the file immediately after any shebang or encoding comments.
3120
+ #
3121
+ # Example rubocop.yml:
3122
+ #
3123
+ # Style/Copyright:
3124
+ # Enabled: true
3125
+ # Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc'
3126
+ # AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.'
3127
+ #
3128
+ Style/Copyright:
3129
+ Description: 'Include a copyright notice in each file before any code.'
3130
+ Enabled: false
3131
+ VersionAdded: '0.30'
3132
+ Notice: '^Copyright (\(c\) )?2[0-9]{3} .+'
3133
+ AutocorrectNotice: ''
3134
+
3135
+ Style/DateTime:
3136
+ Description: 'Use Time over DateTime.'
3137
+ StyleGuide: '#date--time'
3138
+ Enabled: false
3139
+ VersionAdded: '0.51'
3140
+ VersionChanged: '0.92'
3141
+ SafeAutoCorrect: false
3142
+ AllowCoercion: false
3143
+
3144
+ Style/DefWithParentheses:
3145
+ Description: 'Use def with parentheses when there are arguments.'
3146
+ StyleGuide: '#method-parens'
3147
+ Enabled: true
3148
+ VersionAdded: '0.9'
3149
+ VersionChanged: '0.12'
3150
+
3151
+ Style/Dir:
3152
+ Description: >-
3153
+ Use the `__dir__` method to retrieve the canonicalized
3154
+ absolute path to the current file.
3155
+ Enabled: true
3156
+ VersionAdded: '0.50'
3157
+
3158
+ Style/DisableCopsWithinSourceCodeDirective:
3159
+ Description: >-
3160
+ Forbids disabling/enabling cops within source code.
3161
+ Enabled: false
3162
+ VersionAdded: '0.82'
3163
+ VersionChanged: '1.9'
3164
+ AllowedCops: []
3165
+
3166
+ Style/DocumentDynamicEvalDefinition:
3167
+ Description: >-
3168
+ When using `class_eval` (or other `eval`) with string interpolation,
3169
+ add a comment block showing its appearance if interpolated.
3170
+ StyleGuide: '#eval-comment-docs'
3171
+ Enabled: pending
3172
+ VersionAdded: '1.1'
3173
+ VersionChanged: '1.3'
3174
+
3175
+ Style/Documentation:
3176
+ Description: 'Document classes and non-namespace modules.'
3177
+ Enabled: true
3178
+ VersionAdded: '0.9'
3179
+ Exclude:
3180
+ - 'spec/**/*'
3181
+ - 'test/**/*'
3182
+
3183
+ Style/DocumentationMethod:
3184
+ Description: 'Checks for missing documentation comment for public methods.'
3185
+ Enabled: false
3186
+ VersionAdded: '0.43'
3187
+ Exclude:
3188
+ - 'spec/**/*'
3189
+ - 'test/**/*'
3190
+ RequireForNonPublicMethods: false
3191
+
3192
+ Style/DoubleCopDisableDirective:
3193
+ Description: 'Checks for double rubocop:disable comments on a single line.'
3194
+ Enabled: true
3195
+ VersionAdded: '0.73'
3196
+
3197
+ Style/DoubleNegation:
3198
+ Description: 'Checks for uses of double negation (!!).'
3199
+ StyleGuide: '#no-bang-bang'
3200
+ Enabled: true
3201
+ VersionAdded: '0.19'
3202
+ VersionChanged: '1.2'
3203
+ EnforcedStyle: allowed_in_returns
3204
+ SafeAutoCorrect: false
3205
+ SupportedStyles:
3206
+ - allowed_in_returns
3207
+ - forbidden
3208
+
3209
+ Style/EachForSimpleLoop:
3210
+ Description: >-
3211
+ Use `Integer#times` for a simple loop which iterates a fixed
3212
+ number of times.
3213
+ Enabled: true
3214
+ VersionAdded: '0.41'
3215
+
3216
+ Style/EachWithObject:
3217
+ Description: 'Prefer `each_with_object` over `inject` or `reduce`.'
3218
+ Enabled: true
3219
+ VersionAdded: '0.22'
3220
+ VersionChanged: '0.42'
3221
+
3222
+ Style/EmptyBlockParameter:
3223
+ Description: 'Omit pipes for empty block parameters.'
3224
+ Enabled: true
3225
+ VersionAdded: '0.52'
3226
+
3227
+ Style/EmptyCaseCondition:
3228
+ Description: 'Avoid empty condition in case statements.'
3229
+ Enabled: true
3230
+ VersionAdded: '0.40'
3231
+
3232
+ Style/EmptyElse:
3233
+ Description: 'Avoid empty else-clauses.'
3234
+ Enabled: true
3235
+ VersionAdded: '0.28'
3236
+ VersionChanged: '0.32'
3237
+ EnforcedStyle: both
3238
+ # empty - warn only on empty `else`
3239
+ # nil - warn on `else` with nil in it
3240
+ # both - warn on empty `else` and `else` with `nil` in it
3241
+ SupportedStyles:
3242
+ - empty
3243
+ - nil
3244
+ - both
3245
+
3246
+ Style/EmptyLambdaParameter:
3247
+ Description: 'Omit parens for empty lambda parameters.'
3248
+ Enabled: true
3249
+ VersionAdded: '0.52'
3250
+
3251
+ Style/EmptyLiteral:
3252
+ Description: 'Prefer literals to Array.new/Hash.new/String.new.'
3253
+ StyleGuide: '#literal-array-hash'
3254
+ Enabled: true
3255
+ VersionAdded: '0.9'
3256
+ VersionChanged: '0.12'
3257
+
3258
+ Style/EmptyMethod:
3259
+ Description: 'Checks the formatting of empty method definitions.'
3260
+ StyleGuide: '#no-single-line-methods'
3261
+ Enabled: true
3262
+ VersionAdded: '0.46'
3263
+ EnforcedStyle: compact
3264
+ SupportedStyles:
3265
+ - compact
3266
+ - expanded
3267
+
3268
+ Style/Encoding:
3269
+ Description: 'Use UTF-8 as the source file encoding.'
3270
+ StyleGuide: '#utf-8'
3271
+ Enabled: true
3272
+ VersionAdded: '0.9'
3273
+ VersionChanged: '0.50'
3274
+
3275
+ Style/EndBlock:
3276
+ Description: 'Avoid the use of END blocks.'
3277
+ StyleGuide: '#no-END-blocks'
3278
+ Enabled: true
3279
+ VersionAdded: '0.9'
3280
+ VersionChanged: '0.81'
3281
+
3282
+ Style/EndlessMethod:
3283
+ Description: 'Avoid the use of multi-lined endless method definitions.'
3284
+ StyleGuide: '#endless-methods'
3285
+ Enabled: pending
3286
+ VersionAdded: '1.8'
3287
+ EnforcedStyle: allow_single_line
3288
+ SupportedStyles:
3289
+ - allow_single_line
3290
+ - allow_always
3291
+ - disallow
3292
+
3293
+ Style/EvalWithLocation:
3294
+ Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.'
3295
+ Enabled: true
3296
+ VersionAdded: '0.52'
3297
+
3298
+ Style/EvenOdd:
3299
+ Description: 'Favor the use of `Integer#even?` && `Integer#odd?`.'
3300
+ StyleGuide: '#predicate-methods'
3301
+ Enabled: true
3302
+ VersionAdded: '0.12'
3303
+ VersionChanged: '0.29'
3304
+
3305
+ Style/ExpandPathArguments:
3306
+ Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
3307
+ Enabled: true
3308
+ VersionAdded: '0.53'
3309
+
3310
+ Style/ExplicitBlockArgument:
3311
+ Description: >-
3312
+ Consider using explicit block argument to avoid writing block literal
3313
+ that just passes its arguments to another block.
3314
+ StyleGuide: '#block-argument'
3315
+ Enabled: true
3316
+ VersionAdded: '0.89'
3317
+ VersionChanged: '1.8'
3318
+
3319
+ Style/ExponentialNotation:
3320
+ Description: 'When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).'
3321
+ StyleGuide: '#exponential-notation'
3322
+ Enabled: true
3323
+ VersionAdded: '0.82'
3324
+ EnforcedStyle: scientific
3325
+ SupportedStyles:
3326
+ - scientific
3327
+ - engineering
3328
+ - integral
3329
+
3330
+ Style/FloatDivision:
3331
+ Description: 'For performing float division, coerce one side only.'
3332
+ StyleGuide: '#float-division'
3333
+ Reference: 'https://blog.rubystyle.guide/ruby/2019/06/21/float-division.html'
3334
+ Enabled: true
3335
+ VersionAdded: '0.72'
3336
+ VersionChanged: '1.9'
3337
+ Safe: false
3338
+ EnforcedStyle: single_coerce
3339
+ SupportedStyles:
3340
+ - left_coerce
3341
+ - right_coerce
3342
+ - single_coerce
3343
+ - fdiv
3344
+
3345
+ Style/For:
3346
+ Description: 'Checks use of for or each in multiline loops.'
3347
+ StyleGuide: '#no-for-loops'
3348
+ Enabled: true
3349
+ VersionAdded: '0.13'
3350
+ VersionChanged: '0.59'
3351
+ EnforcedStyle: each
3352
+ SupportedStyles:
3353
+ - each
3354
+ - for
3355
+
3356
+ Style/FormatString:
3357
+ Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
3358
+ StyleGuide: '#sprintf'
3359
+ Enabled: true
3360
+ VersionAdded: '0.19'
3361
+ VersionChanged: '0.49'
3362
+ EnforcedStyle: format
3363
+ SupportedStyles:
3364
+ - format
3365
+ - sprintf
3366
+ - percent
3367
+
3368
+ Style/FormatStringToken:
3369
+ Description: 'Use a consistent style for format string tokens.'
3370
+ Enabled: true
3371
+ EnforcedStyle: annotated
3372
+ SupportedStyles:
3373
+ # Prefer tokens which contain a sprintf like type annotation like
3374
+ # `%<name>s`, `%<age>d`, `%<score>f`
3375
+ - annotated
3376
+ # Prefer simple looking "template" style tokens like `%{name}`, `%{age}`
3377
+ - template
3378
+ - unannotated
3379
+ # `MaxUnannotatedPlaceholdersAllowed` defines the number of `unannotated`
3380
+ # style token in a format string to be allowed when enforced style is not
3381
+ # `unannotated`.
3382
+ MaxUnannotatedPlaceholdersAllowed: 1
3383
+ VersionAdded: '0.49'
3384
+ VersionChanged: '1.0'
3385
+ IgnoredMethods: []
3386
+
3387
+ Style/FrozenStringLiteralComment:
3388
+ Description: >-
3389
+ Add the frozen_string_literal comment to the top of files
3390
+ to help transition to frozen string literals by default.
3391
+ Enabled: true
3392
+ VersionAdded: '0.36'
3393
+ VersionChanged: '0.79'
3394
+ EnforcedStyle: always
3395
+ SupportedStyles:
3396
+ # `always` will always add the frozen string literal comment to a file
3397
+ # regardless of the Ruby version or if `freeze` or `<<` are called on a
3398
+ # string literal. It is possible that this will create errors.
3399
+ - always
3400
+ # `always_true` will add the frozen string literal comment to a file,
3401
+ # similarly to the `always` style, but will also change any disabled
3402
+ # comments (e.g. `# frozen_string_literal: false`) to be enabled.
3403
+ - always_true
3404
+ # `never` will enforce that the frozen string literal comment does not
3405
+ # exist in a file.
3406
+ - never
3407
+ SafeAutoCorrect: false
3408
+
3409
+ Style/GlobalStdStream:
3410
+ Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
3411
+ StyleGuide: '#global-stdout'
3412
+ Enabled: true
3413
+ VersionAdded: '0.89'
3414
+ SafeAutoCorrect: false
3415
+
3416
+ Style/GlobalVars:
3417
+ Description: 'Do not introduce global variables.'
3418
+ StyleGuide: '#instance-vars'
3419
+ Reference: 'https://www.zenspider.com/ruby/quickref.html'
3420
+ Enabled: true
3421
+ VersionAdded: '0.13'
3422
+ # Built-in global variables are allowed by default.
3423
+ AllowedVariables: []
3424
+
3425
+ Style/GuardClause:
3426
+ Description: 'Check for conditionals that can be replaced with guard clauses.'
3427
+ StyleGuide: '#no-nested-conditionals'
3428
+ Enabled: true
3429
+ VersionAdded: '0.20'
3430
+ VersionChanged: '0.22'
3431
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
3432
+ # needs to have to trigger this cop
3433
+ MinBodyLength: 1
3434
+
3435
+ Style/HashAsLastArrayItem:
3436
+ Description: >-
3437
+ Checks for presence or absence of braces around hash literal as a last
3438
+ array item depending on configuration.
3439
+ StyleGuide: '#hash-literal-as-last-array-item'
3440
+ Enabled: true
3441
+ VersionAdded: '0.88'
3442
+ EnforcedStyle: braces
3443
+ SupportedStyles:
3444
+ - braces
3445
+ - no_braces
3446
+
3447
+ Style/HashConversion:
3448
+ Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.'
3449
+ Enabled: pending
3450
+ VersionAdded: '1.10'
3451
+ VersionChanged: '1.11'
3452
+ AllowSplatArgument: true
3453
+
3454
+ Style/HashEachMethods:
3455
+ Description: 'Use Hash#each_key and Hash#each_value.'
3456
+ StyleGuide: '#hash-each'
3457
+ Enabled: true
3458
+ VersionAdded: '0.80'
3459
+ Safe: false
3460
+
3461
+ Style/HashExcept:
3462
+ Description: >-
3463
+ Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods
3464
+ that can be replaced with `Hash#except` method.
3465
+ Enabled: pending
3466
+ VersionAdded: '1.7'
3467
+
3468
+ Style/HashLikeCase:
3469
+ Description: >-
3470
+ Checks for places where `case-when` represents a simple 1:1
3471
+ mapping and can be replaced with a hash lookup.
3472
+ Enabled: true
3473
+ VersionAdded: '0.88'
3474
+ # `MinBranchesCount` defines the number of branches `case` needs to have
3475
+ # to trigger this cop
3476
+ MinBranchesCount: 3
3477
+
3478
+ Style/HashSyntax:
3479
+ Description: >-
3480
+ Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
3481
+ { :a => 1, :b => 2 }.
3482
+ StyleGuide: '#hash-literals'
3483
+ Enabled: true
3484
+ VersionAdded: '0.9'
3485
+ VersionChanged: '0.43'
3486
+ EnforcedStyle: ruby19
3487
+ SupportedStyles:
3488
+ # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys
3489
+ - ruby19
3490
+ # checks for hash rocket syntax for all hashes
3491
+ - hash_rockets
3492
+ # forbids mixed key syntaxes (e.g. {a: 1, :b => 2})
3493
+ - no_mixed_keys
3494
+ # enforces both ruby19 and no_mixed_keys styles
3495
+ - ruby19_no_mixed_keys
3496
+ # Force hashes that have a symbol value to use hash rockets
3497
+ UseHashRocketsWithSymbolValues: false
3498
+ # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
3499
+ PreferHashRocketsForNonAlnumEndingSymbols: false
3500
+
3501
+ Style/HashTransformKeys:
3502
+ Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.'
3503
+ Enabled: true
3504
+ VersionAdded: '0.80'
3505
+ VersionChanged: '0.90'
3506
+ Safe: false
3507
+
3508
+ Style/HashTransformValues:
3509
+ Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.'
3510
+ Enabled: true
3511
+ VersionAdded: '0.80'
3512
+ VersionChanged: '0.90'
3513
+ Safe: false
3514
+
3515
+ Style/IdenticalConditionalBranches:
3516
+ Description: >-
3517
+ Checks that conditional statements do not have an identical
3518
+ line at the end of each branch, which can validly be moved
3519
+ out of the conditional.
3520
+ Enabled: true
3521
+ VersionAdded: '0.36'
3522
+
3523
+ Style/IfInsideElse:
3524
+ Description: 'Finds if nodes inside else, which can be converted to elsif.'
3525
+ Enabled: true
3526
+ AllowIfModifier: false
3527
+ VersionAdded: '0.36'
3528
+ VersionChanged: '1.3'
3529
+
3530
+ Style/IfUnlessModifier:
3531
+ Description: >-
3532
+ Favor modifier if/unless usage when you have a
3533
+ single-line body.
3534
+ StyleGuide: '#if-as-a-modifier'
3535
+ Enabled: true
3536
+ VersionAdded: '0.9'
3537
+ VersionChanged: '0.30'
3538
+
3539
+ Style/IfUnlessModifierOfIfUnless:
3540
+ Description: >-
3541
+ Avoid modifier if/unless usage on conditionals.
3542
+ Enabled: true
3543
+ VersionAdded: '0.39'
3544
+ VersionChanged: '0.87'
3545
+
3546
+ Style/IfWithBooleanLiteralBranches:
3547
+ Description: 'Checks for redundant `if` with boolean literal branches.'
3548
+ Enabled: pending
3549
+ VersionAdded: '1.9'
3550
+ SafeAutoCorrect: false
3551
+ AllowedMethods:
3552
+ - nonzero?
3553
+
3554
+ Style/IfWithSemicolon:
3555
+ Description: 'Do not use if x; .... Use the ternary operator instead.'
3556
+ StyleGuide: '#no-semicolon-ifs'
3557
+ Enabled: true
3558
+ VersionAdded: '0.9'
3559
+ VersionChanged: '0.83'
3560
+
3561
+ Style/ImplicitRuntimeError:
3562
+ Description: >-
3563
+ Use `raise` or `fail` with an explicit exception class and
3564
+ message, rather than just a message.
3565
+ Enabled: false
3566
+ VersionAdded: '0.41'
3567
+
3568
+ Style/InfiniteLoop:
3569
+ Description: >-
3570
+ Use Kernel#loop for infinite loops.
3571
+ This cop is unsafe in the body may raise a `StopIteration` exception.
3572
+ Safe: false
3573
+ StyleGuide: '#infinite-loop'
3574
+ Enabled: true
3575
+ VersionAdded: '0.26'
3576
+ VersionChanged: '0.61'
3577
+
3578
+ Style/InlineComment:
3579
+ Description: 'Avoid trailing inline comments.'
3580
+ Enabled: false
3581
+ VersionAdded: '0.23'
3582
+
3583
+ Style/InverseMethods:
3584
+ Description: >-
3585
+ Use the inverse method instead of `!.method`
3586
+ if an inverse method is defined.
3587
+ Enabled: true
3588
+ Safe: false
3589
+ VersionAdded: '0.48'
3590
+ # `InverseMethods` are methods that can be inverted by a not (`not` or `!`)
3591
+ # The relationship of inverse methods only needs to be defined in one direction.
3592
+ # Keys and values both need to be defined as symbols.
3593
+ InverseMethods:
3594
+ :any?: :none?
3595
+ :even?: :odd?
3596
+ :==: :!=
3597
+ :=~: :!~
3598
+ :<: :>=
3599
+ :>: :<=
3600
+ # `ActiveSupport` defines some common inverse methods. They are listed below,
3601
+ # and not enabled by default.
3602
+ #:present?: :blank?,
3603
+ #:include?: :exclude?
3604
+ # `InverseBlocks` are methods that are inverted by inverting the return
3605
+ # of the block that is passed to the method
3606
+ InverseBlocks:
3607
+ :select: :reject
3608
+ :select!: :reject!
3609
+
3610
+ Style/IpAddresses:
3611
+ Description: "Don't include literal IP addresses in code."
3612
+ Enabled: false
3613
+ VersionAdded: '0.58'
3614
+ VersionChanged: '0.91'
3615
+ # Allow addresses to be permitted
3616
+ AllowedAddresses:
3617
+ - "::"
3618
+ # :: is a valid IPv6 address, but could potentially be legitimately in code
3619
+ Exclude:
3620
+ - '**/*.gemfile'
3621
+ - '**/Gemfile'
3622
+ - '**/gems.rb'
3623
+ - '**/*.gemspec'
3624
+
3625
+ Style/KeywordParametersOrder:
3626
+ Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
3627
+ StyleGuide: '#keyword-parameters-order'
3628
+ Enabled: true
3629
+ VersionAdded: '0.90'
3630
+ VersionChanged: '1.7'
3631
+
3632
+ Style/Lambda:
3633
+ Description: 'Use the new lambda literal syntax for single-line blocks.'
3634
+ StyleGuide: '#lambda-multi-line'
3635
+ Enabled: true
3636
+ VersionAdded: '0.9'
3637
+ VersionChanged: '0.40'
3638
+ EnforcedStyle: line_count_dependent
3639
+ SupportedStyles:
3640
+ - line_count_dependent
3641
+ - lambda
3642
+ - literal
3643
+
3644
+ Style/LambdaCall:
3645
+ Description: 'Use lambda.call(...) instead of lambda.(...).'
3646
+ StyleGuide: '#proc-call'
3647
+ Enabled: true
3648
+ VersionAdded: '0.13'
3649
+ VersionChanged: '0.14'
3650
+ EnforcedStyle: call
3651
+ SupportedStyles:
3652
+ - call
3653
+ - braces
3654
+
3655
+ Style/LineEndConcatenation:
3656
+ Description: >-
3657
+ Use \ instead of + or << to concatenate two string literals at
3658
+ line end.
3659
+ Enabled: true
3660
+ SafeAutoCorrect: false
3661
+ VersionAdded: '0.18'
3662
+ VersionChanged: '0.64'
3663
+
3664
+ Style/MethodCallWithArgsParentheses:
3665
+ Description: 'Use parentheses for method calls with arguments.'
3666
+ StyleGuide: '#method-invocation-parens'
3667
+ Enabled: false
3668
+ VersionAdded: '0.47'
3669
+ VersionChanged: '1.7'
3670
+ IgnoreMacros: true
3671
+ IgnoredMethods: []
3672
+ IgnoredPatterns: []
3673
+ IncludedMacros: []
3674
+ AllowParenthesesInMultilineCall: false
3675
+ AllowParenthesesInChaining: false
3676
+ AllowParenthesesInCamelCaseMethod: false
3677
+ EnforcedStyle: require_parentheses
3678
+ SupportedStyles:
3679
+ - require_parentheses
3680
+ - omit_parentheses
3681
+
3682
+ Style/MethodCallWithoutArgsParentheses:
3683
+ Description: 'Do not use parentheses for method calls with no arguments.'
3684
+ StyleGuide: '#method-invocation-parens'
3685
+ Enabled: true
3686
+ IgnoredMethods: []
3687
+ VersionAdded: '0.47'
3688
+ VersionChanged: '0.55'
3689
+
3690
+ Style/MethodCalledOnDoEndBlock:
3691
+ Description: 'Avoid chaining a method call on a do...end block.'
3692
+ StyleGuide: '#single-line-blocks'
3693
+ Enabled: false
3694
+ VersionAdded: '0.14'
3695
+
3696
+ Style/MethodDefParentheses:
3697
+ Description: >-
3698
+ Checks if the method definitions have or don't have
3699
+ parentheses.
3700
+ StyleGuide: '#method-parens'
3701
+ Enabled: true
3702
+ VersionAdded: '0.16'
3703
+ VersionChanged: '1.7'
3704
+ EnforcedStyle: require_parentheses
3705
+ SupportedStyles:
3706
+ - require_parentheses
3707
+ - require_no_parentheses
3708
+ - require_no_parentheses_except_multiline
3709
+
3710
+ Style/MinMax:
3711
+ Description: >-
3712
+ Use `Enumerable#minmax` instead of `Enumerable#min`
3713
+ and `Enumerable#max` in conjunction.
3714
+ Enabled: true
3715
+ VersionAdded: '0.50'
3716
+
3717
+ Style/MissingElse:
3718
+ Description: >-
3719
+ Require if/case expressions to have an else branches.
3720
+ If enabled, it is recommended that
3721
+ Style/UnlessElse and Style/EmptyElse be enabled.
3722
+ This will conflict with Style/EmptyElse if
3723
+ Style/EmptyElse is configured to style "both".
3724
+ Enabled: false
3725
+ VersionAdded: '0.30'
3726
+ VersionChanged: '0.38'
3727
+ EnforcedStyle: both
3728
+ SupportedStyles:
3729
+ # if - warn when an if expression is missing an else branch
3730
+ # case - warn when a case expression is missing an else branch
3731
+ # both - warn when an if or case expression is missing an else branch
3732
+ - if
3733
+ - case
3734
+ - both
3735
+
3736
+ Style/MissingRespondToMissing:
3737
+ Description: >-
3738
+ Checks if `method_missing` is implemented
3739
+ without implementing `respond_to_missing`.
3740
+ StyleGuide: '#no-method-missing'
3741
+ Enabled: true
3742
+ VersionAdded: '0.56'
3743
+
3744
+ Style/MixinGrouping:
3745
+ Description: 'Checks for grouping of mixins in `class` and `module` bodies.'
3746
+ StyleGuide: '#mixin-grouping'
3747
+ Enabled: true
3748
+ VersionAdded: '0.48'
3749
+ VersionChanged: '0.49'
3750
+ EnforcedStyle: separated
3751
+ SupportedStyles:
3752
+ # separated: each mixed in module goes in a separate statement.
3753
+ # grouped: mixed in modules are grouped into a single statement.
3754
+ - separated
3755
+ - grouped
3756
+
3757
+ Style/MixinUsage:
3758
+ Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.'
3759
+ Enabled: true
3760
+ VersionAdded: '0.51'
3761
+
3762
+ Style/ModuleFunction:
3763
+ Description: 'Checks for usage of `extend self` in modules.'
3764
+ StyleGuide: '#module-function'
3765
+ Enabled: true
3766
+ VersionAdded: '0.11'
3767
+ VersionChanged: '0.65'
3768
+ EnforcedStyle: module_function
3769
+ SupportedStyles:
3770
+ - module_function
3771
+ - extend_self
3772
+ - forbidden
3773
+ Autocorrect: false
3774
+ SafeAutoCorrect: false
3775
+
3776
+ Style/MultilineBlockChain:
3777
+ Description: 'Avoid multi-line chains of blocks.'
3778
+ StyleGuide: '#single-line-blocks'
3779
+ Enabled: true
3780
+ VersionAdded: '0.13'
3781
+
3782
+ Style/MultilineIfModifier:
3783
+ Description: 'Only use if/unless modifiers on single line statements.'
3784
+ StyleGuide: '#no-multiline-if-modifiers'
3785
+ Enabled: true
3786
+ VersionAdded: '0.45'
3787
+
3788
+ Style/MultilineIfThen:
3789
+ Description: 'Do not use then for multi-line if/unless.'
3790
+ StyleGuide: '#no-then'
3791
+ Enabled: true
3792
+ VersionAdded: '0.9'
3793
+ VersionChanged: '0.26'
3794
+
3795
+ Style/MultilineMemoization:
3796
+ Description: 'Wrap multiline memoizations in a `begin` and `end` block.'
3797
+ Enabled: true
3798
+ VersionAdded: '0.44'
3799
+ VersionChanged: '0.48'
3800
+ EnforcedStyle: keyword
3801
+ SupportedStyles:
3802
+ - keyword
3803
+ - braces
3804
+
3805
+ Style/MultilineMethodSignature:
3806
+ Description: 'Avoid multi-line method signatures.'
3807
+ Enabled: false
3808
+ VersionAdded: '0.59'
3809
+ VersionChanged: '1.7'
3810
+
3811
+ Style/MultilineTernaryOperator:
3812
+ Description: >-
3813
+ Avoid multi-line ?: (the ternary operator);
3814
+ use if/unless instead.
3815
+ StyleGuide: '#no-multiline-ternary'
3816
+ Enabled: true
3817
+ VersionAdded: '0.9'
3818
+ VersionChanged: '0.86'
3819
+
3820
+ Style/MultilineWhenThen:
3821
+ Description: 'Do not use then for multi-line when statement.'
3822
+ StyleGuide: '#no-then'
3823
+ Enabled: true
3824
+ VersionAdded: '0.73'
3825
+
3826
+ Style/MultipleComparison:
3827
+ Description: >-
3828
+ Avoid comparing a variable with multiple items in a conditional,
3829
+ use Array#include? instead.
3830
+ Enabled: true
3831
+ VersionAdded: '0.49'
3832
+ VersionChanged: '1.1'
3833
+
3834
+ Style/MutableConstant:
3835
+ Description: 'Do not assign mutable objects to constants.'
3836
+ Enabled: true
3837
+ VersionAdded: '0.34'
3838
+ VersionChanged: '1.8'
3839
+ SafeAutoCorrect: false
3840
+ EnforcedStyle: literals
3841
+ SupportedStyles:
3842
+ # literals: freeze literals assigned to constants
3843
+ # strict: freeze all constants
3844
+ # Strict mode is considered an experimental feature. It has not been updated
3845
+ # with an exhaustive list of all methods that will produce frozen objects so
3846
+ # there is a decent chance of getting some false positives. Luckily, there is
3847
+ # no harm in freezing an already frozen object.
3848
+ - literals
3849
+ - strict
3850
+
3851
+ Style/NegatedIf:
3852
+ Description: >-
3853
+ Favor unless over if for negative conditions
3854
+ (or control flow or).
3855
+ StyleGuide: '#unless-for-negatives'
3856
+ Enabled: true
3857
+ VersionAdded: '0.20'
3858
+ VersionChanged: '0.48'
3859
+ EnforcedStyle: both
3860
+ SupportedStyles:
3861
+ # both: prefix and postfix negated `if` should both use `unless`
3862
+ # prefix: only use `unless` for negated `if` statements positioned before the body of the statement
3863
+ # postfix: only use `unless` for negated `if` statements positioned after the body of the statement
3864
+ - both
3865
+ - prefix
3866
+ - postfix
3867
+
3868
+ Style/NegatedIfElseCondition:
3869
+ Description: >-
3870
+ This cop checks for uses of `if-else` and ternary operators with a negated condition
3871
+ which can be simplified by inverting condition and swapping branches.
3872
+ Enabled: pending
3873
+ VersionAdded: '1.2'
3874
+
3875
+ Style/NegatedUnless:
3876
+ Description: 'Favor if over unless for negative conditions.'
3877
+ StyleGuide: '#if-for-negatives'
3878
+ Enabled: true
3879
+ VersionAdded: '0.69'
3880
+ EnforcedStyle: both
3881
+ SupportedStyles:
3882
+ # both: prefix and postfix negated `unless` should both use `if`
3883
+ # prefix: only use `if` for negated `unless` statements positioned before the body of the statement
3884
+ # postfix: only use `if` for negated `unless` statements positioned after the body of the statement
3885
+ - both
3886
+ - prefix
3887
+ - postfix
3888
+
3889
+ Style/NegatedWhile:
3890
+ Description: 'Favor until over while for negative conditions.'
3891
+ StyleGuide: '#until-for-negatives'
3892
+ Enabled: true
3893
+ VersionAdded: '0.20'
3894
+
3895
+ Style/NestedModifier:
3896
+ Description: 'Avoid using nested modifiers.'
3897
+ StyleGuide: '#no-nested-modifiers'
3898
+ Enabled: true
3899
+ VersionAdded: '0.35'
3900
+
3901
+ Style/NestedParenthesizedCalls:
3902
+ Description: >-
3903
+ Parenthesize method calls which are nested inside the
3904
+ argument list of another parenthesized method call.
3905
+ Enabled: true
3906
+ VersionAdded: '0.36'
3907
+ VersionChanged: '0.77'
3908
+ AllowedMethods:
3909
+ - be
3910
+ - be_a
3911
+ - be_an
3912
+ - be_between
3913
+ - be_falsey
3914
+ - be_kind_of
3915
+ - be_instance_of
3916
+ - be_truthy
3917
+ - be_within
3918
+ - eq
3919
+ - eql
3920
+ - end_with
3921
+ - include
3922
+ - match
3923
+ - raise_error
3924
+ - respond_to
3925
+ - start_with
3926
+
3927
+ Style/NestedTernaryOperator:
3928
+ Description: 'Use one expression per branch in a ternary operator.'
3929
+ StyleGuide: '#no-nested-ternary'
3930
+ Enabled: true
3931
+ VersionAdded: '0.9'
3932
+ VersionChanged: '0.86'
3933
+
3934
+ Style/Next:
3935
+ Description: 'Use `next` to skip iteration instead of a condition at the end.'
3936
+ StyleGuide: '#no-nested-conditionals'
3937
+ Enabled: true
3938
+ VersionAdded: '0.22'
3939
+ VersionChanged: '0.35'
3940
+ # With `always` all conditions at the end of an iteration needs to be
3941
+ # replaced by next - with `skip_modifier_ifs` the modifier if like this one
3942
+ # are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
3943
+ EnforcedStyle: skip_modifier_ifs
3944
+ # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless`
3945
+ # needs to have to trigger this cop
3946
+ MinBodyLength: 3
3947
+ SupportedStyles:
3948
+ - skip_modifier_ifs
3949
+ - always
3950
+
3951
+ Style/NilComparison:
3952
+ Description: 'Prefer x.nil? to x == nil.'
3953
+ StyleGuide: '#predicate-methods'
3954
+ Enabled: true
3955
+ VersionAdded: '0.12'
3956
+ VersionChanged: '0.59'
3957
+ EnforcedStyle: predicate
3958
+ SupportedStyles:
3959
+ - predicate
3960
+ - comparison
3961
+
3962
+ Style/NilLambda:
3963
+ Description: 'Prefer `-> {}` to `-> { nil }`.'
3964
+ Enabled: pending
3965
+ VersionAdded: '1.3'
3966
+
3967
+ Style/NonNilCheck:
3968
+ Description: 'Checks for redundant nil checks.'
3969
+ StyleGuide: '#no-non-nil-checks'
3970
+ Enabled: true
3971
+ VersionAdded: '0.20'
3972
+ VersionChanged: '0.22'
3973
+ # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
3974
+ # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
3975
+ # **usually** OK, but might change behavior.
3976
+ #
3977
+ # With `IncludeSemanticChanges` set to `false`, this cop does not report
3978
+ # offenses for `!x.nil?` and does no changes that might change behavior.
3979
+ IncludeSemanticChanges: false
3980
+
3981
+ Style/Not:
3982
+ Description: 'Use ! instead of not.'
3983
+ StyleGuide: '#bang-not-not'
3984
+ Enabled: true
3985
+ VersionAdded: '0.9'
3986
+ VersionChanged: '0.20'
3987
+
3988
+ Style/NumericLiteralPrefix:
3989
+ Description: 'Use smallcase prefixes for numeric literals.'
3990
+ StyleGuide: '#numeric-literal-prefixes'
3991
+ Enabled: true
3992
+ VersionAdded: '0.41'
3993
+ EnforcedOctalStyle: zero_with_o
3994
+ SupportedOctalStyles:
3995
+ - zero_with_o
3996
+ - zero_only
3997
+
3998
+
3999
+ Style/NumericLiterals:
4000
+ Description: >-
4001
+ Add underscores to large numeric literals to improve their
4002
+ readability.
4003
+ StyleGuide: '#underscores-in-numerics'
4004
+ Enabled: true
4005
+ VersionAdded: '0.9'
4006
+ VersionChanged: '0.48'
4007
+ MinDigits: 5
4008
+ Strict: false
4009
+
4010
+ Style/NumericPredicate:
4011
+ Description: >-
4012
+ Checks for the use of predicate- or comparison methods for
4013
+ numeric comparisons.
4014
+ StyleGuide: '#predicate-methods'
4015
+ Safe: false
4016
+ # This will change to a new method call which isn't guaranteed to be on the
4017
+ # object. Switching these methods has to be done with knowledge of the types
4018
+ # of the variables which rubocop doesn't have.
4019
+ SafeAutoCorrect: false
4020
+ Enabled: true
4021
+ VersionAdded: '0.42'
4022
+ VersionChanged: '0.59'
4023
+ EnforcedStyle: predicate
4024
+ SupportedStyles:
4025
+ - predicate
4026
+ - comparison
4027
+ IgnoredMethods: []
4028
+ # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
4029
+ # false positives.
4030
+ Exclude:
4031
+ - 'spec/**/*'
4032
+
4033
+ Style/OneLineConditional:
4034
+ Description: >-
4035
+ Favor the ternary operator (?:) or multi-line constructs over
4036
+ single-line if/then/else/end constructs.
4037
+ StyleGuide: '#ternary-operator'
4038
+ Enabled: true
4039
+ AlwaysCorrectToMultiline: false
4040
+ VersionAdded: '0.9'
4041
+ VersionChanged: '0.90'
4042
+
4043
+ Style/OptionHash:
4044
+ Description: "Don't use option hashes when you can use keyword arguments."
4045
+ Enabled: false
4046
+ VersionAdded: '0.33'
4047
+ VersionChanged: '0.34'
4048
+ # A list of parameter names that will be flagged by this cop.
4049
+ SuspiciousParamNames:
4050
+ - options
4051
+ - opts
4052
+ - args
4053
+ - params
4054
+ - parameters
4055
+
4056
+ Style/OptionalArguments:
4057
+ Description: >-
4058
+ Checks for optional arguments that do not appear at the end
4059
+ of the argument list.
4060
+ StyleGuide: '#optional-arguments'
4061
+ Enabled: true
4062
+ Safe: false
4063
+ VersionAdded: '0.33'
4064
+ VersionChanged: '0.83'
4065
+
4066
+ Style/OptionalBooleanParameter:
4067
+ Description: 'Use keyword arguments when defining method with boolean argument.'
4068
+ StyleGuide: '#boolean-keyword-arguments'
4069
+ Enabled: true
4070
+ Safe: false
4071
+ VersionAdded: '0.89'
4072
+ AllowedMethods:
4073
+ - respond_to_missing?
4074
+
4075
+ Style/OrAssignment:
4076
+ Description: 'Recommend usage of double pipe equals (||=) where applicable.'
4077
+ StyleGuide: '#double-pipe-for-uninit'
4078
+ Enabled: true
4079
+ VersionAdded: '0.50'
4080
+
4081
+ Style/ParallelAssignment:
4082
+ Description: >-
4083
+ Check for simple usages of parallel assignment.
4084
+ It will only warn when the number of variables
4085
+ matches on both sides of the assignment.
4086
+ StyleGuide: '#parallel-assignment'
4087
+ Enabled: true
4088
+ VersionAdded: '0.32'
4089
+
4090
+ Style/ParenthesesAroundCondition:
4091
+ Description: >-
4092
+ Don't use parentheses around the condition of an
4093
+ if/unless/while.
4094
+ StyleGuide: '#no-parens-around-condition'
4095
+ Enabled: true
4096
+ VersionAdded: '0.9'
4097
+ VersionChanged: '0.56'
4098
+ AllowSafeAssignment: true
4099
+ AllowInMultilineConditions: false
4100
+
4101
+ Style/PercentLiteralDelimiters:
4102
+ Description: 'Use `%`-literal delimiters consistently.'
4103
+ StyleGuide: '#percent-literal-braces'
4104
+ Enabled: true
4105
+ VersionAdded: '0.19'
4106
+ # Specify the default preferred delimiter for all types with the 'default' key
4107
+ # Override individual delimiters (even with default specified) by specifying
4108
+ # an individual key
4109
+ PreferredDelimiters:
4110
+ default: ()
4111
+ '%i': '[]'
4112
+ '%I': '[]'
4113
+ '%r': '{}'
4114
+ '%w': '[]'
4115
+ '%W': '[]'
4116
+ VersionChanged: '0.48'
4117
+
4118
+ Style/PercentQLiterals:
4119
+ Description: 'Checks if uses of %Q/%q match the configured preference.'
4120
+ Enabled: true
4121
+ VersionAdded: '0.25'
4122
+ EnforcedStyle: lower_case_q
4123
+ SupportedStyles:
4124
+ - lower_case_q # Use `%q` when possible, `%Q` when necessary
4125
+ - upper_case_q # Always use `%Q`
4126
+
4127
+ Style/PerlBackrefs:
4128
+ Description: 'Avoid Perl-style regex back references.'
4129
+ StyleGuide: '#no-perl-regexp-last-matchers'
4130
+ Enabled: true
4131
+ VersionAdded: '0.13'
4132
+
4133
+ Style/PreferredHashMethods:
4134
+ Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
4135
+ StyleGuide: '#hash-key'
4136
+ Enabled: true
4137
+ Safe: false
4138
+ VersionAdded: '0.41'
4139
+ VersionChanged: '0.70'
4140
+ EnforcedStyle: short
4141
+ SupportedStyles:
4142
+ - short
4143
+ - verbose
4144
+
4145
+ Style/Proc:
4146
+ Description: 'Use proc instead of Proc.new.'
4147
+ StyleGuide: '#proc'
4148
+ Enabled: true
4149
+ VersionAdded: '0.9'
4150
+ VersionChanged: '0.18'
4151
+
4152
+ Style/RaiseArgs:
4153
+ Description: 'Checks the arguments passed to raise/fail.'
4154
+ StyleGuide: '#exception-class-messages'
4155
+ Enabled: true
4156
+ VersionAdded: '0.14'
4157
+ VersionChanged: '1.2'
4158
+ EnforcedStyle: exploded
4159
+ SupportedStyles:
4160
+ - compact # raise Exception.new(msg)
4161
+ - exploded # raise Exception, msg
4162
+ AllowedCompactTypes: []
4163
+
4164
+ Style/RandomWithOffset:
4165
+ Description: >-
4166
+ Prefer to use ranges when generating random numbers instead of
4167
+ integers with offsets.
4168
+ StyleGuide: '#random-numbers'
4169
+ Enabled: true
4170
+ VersionAdded: '0.52'
4171
+
4172
+ Style/RedundantArgument:
4173
+ Description: 'Check for a redundant argument passed to certain methods.'
4174
+ Enabled: pending
4175
+ Safe: false
4176
+ VersionAdded: '1.4'
4177
+ VersionChanged: '1.7'
4178
+ Methods:
4179
+ # Array#join
4180
+ join: ''
4181
+ # String#split
4182
+ split: ' '
4183
+ # String#chomp
4184
+ chomp: "\n"
4185
+ # String#chomp!
4186
+ chomp!: "\n"
4187
+
4188
+ Style/RedundantAssignment:
4189
+ Description: 'Checks for redundant assignment before returning.'
4190
+ Enabled: true
4191
+ VersionAdded: '0.87'
4192
+
4193
+ Style/RedundantBegin:
4194
+ Description: "Don't use begin blocks when they are not needed."
4195
+ StyleGuide: '#begin-implicit'
4196
+ Enabled: true
4197
+ VersionAdded: '0.10'
4198
+ VersionChanged: '0.21'
4199
+
4200
+ Style/RedundantCapitalW:
4201
+ Description: 'Checks for %W when interpolation is not needed.'
4202
+ Enabled: true
4203
+ VersionAdded: '0.76'
4204
+
4205
+ Style/RedundantCondition:
4206
+ Description: 'Checks for unnecessary conditional expressions.'
4207
+ Enabled: true
4208
+ VersionAdded: '0.76'
4209
+
4210
+ Style/RedundantConditional:
4211
+ Description: "Don't return true/false from a conditional."
4212
+ Enabled: true
4213
+ VersionAdded: '0.50'
4214
+
4215
+ Style/RedundantException:
4216
+ Description: "Checks for an obsolete RuntimeException argument in raise/fail."
4217
+ StyleGuide: '#no-explicit-runtimeerror'
4218
+ Enabled: true
4219
+ VersionAdded: '0.14'
4220
+ VersionChanged: '0.29'
4221
+
4222
+ Style/RedundantFetchBlock:
4223
+ Description: >-
4224
+ Use `fetch(key, value)` instead of `fetch(key) { value }`
4225
+ when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.
4226
+ Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
4227
+ Enabled: true
4228
+ Safe: false
4229
+ # If enabled, this cop will autocorrect usages of
4230
+ # `fetch` being called with block returning a constant.
4231
+ # This can be dangerous since constants will not be defined at that moment.
4232
+ SafeForConstants: false
4233
+ VersionAdded: '0.86'
4234
+
4235
+ Style/RedundantFileExtensionInRequire:
4236
+ Description: >-
4237
+ Checks for the presence of superfluous `.rb` extension in
4238
+ the filename provided to `require` and `require_relative`.
4239
+ StyleGuide: '#no-explicit-rb-to-require'
4240
+ Enabled: true
4241
+ VersionAdded: '0.88'
4242
+
4243
+ Style/RedundantFreeze:
4244
+ Description: "Checks usages of Object#freeze on immutable objects."
4245
+ Enabled: true
4246
+ VersionAdded: '0.34'
4247
+ VersionChanged: '0.66'
4248
+
4249
+ Style/RedundantInterpolation:
4250
+ Description: 'Checks for strings that are just an interpolated expression.'
4251
+ Enabled: true
4252
+ VersionAdded: '0.76'
4253
+
4254
+ Style/RedundantParentheses:
4255
+ Description: "Checks for parentheses that seem not to serve any purpose."
4256
+ Enabled: true
4257
+ VersionAdded: '0.36'
4258
+
4259
+ Style/RedundantPercentQ:
4260
+ Description: 'Checks for %q/%Q when single quotes or double quotes would do.'
4261
+ StyleGuide: '#percent-q'
4262
+ Enabled: true
4263
+ VersionAdded: '0.76'
4264
+
4265
+ Style/RedundantRegexpCharacterClass:
4266
+ Description: 'Checks for unnecessary single-element Regexp character classes.'
4267
+ Enabled: true
4268
+ VersionAdded: '0.85'
4269
+
4270
+ Style/RedundantRegexpEscape:
4271
+ Description: 'Checks for redundant escapes in Regexps.'
4272
+ Enabled: true
4273
+ VersionAdded: '0.85'
4274
+
4275
+ Style/RedundantReturn:
4276
+ Description: "Don't use return where it's not required."
4277
+ StyleGuide: '#no-explicit-return'
4278
+ Enabled: true
4279
+ VersionAdded: '0.10'
4280
+ VersionChanged: '0.14'
4281
+ # When `true` allows code like `return x, y`.
4282
+ AllowMultipleReturnValues: false
4283
+
4284
+ Style/RedundantSelf:
4285
+ Description: "Don't use self where it's not needed."
4286
+ StyleGuide: '#no-self-unless-required'
4287
+ Enabled: true
4288
+ VersionAdded: '0.10'
4289
+ VersionChanged: '0.13'
4290
+
4291
+ Style/RedundantSelfAssignment:
4292
+ Description: 'Checks for places where redundant assignments are made for in place modification methods.'
4293
+ Enabled: true
4294
+ Safe: false
4295
+ VersionAdded: '0.90'
4296
+
4297
+ Style/RedundantSort:
4298
+ Description: >-
4299
+ Use `min` instead of `sort.first`,
4300
+ `max_by` instead of `sort_by...last`, etc.
4301
+ Enabled: true
4302
+ VersionAdded: '0.76'
4303
+
4304
+ Style/RedundantSortBy:
4305
+ Description: 'Use `sort` instead of `sort_by { |x| x }`.'
4306
+ Enabled: true
4307
+ VersionAdded: '0.36'
4308
+
4309
+ Style/RegexpLiteral:
4310
+ Description: 'Use / or %r around regular expressions.'
4311
+ StyleGuide: '#percent-r'
4312
+ Enabled: true
4313
+ VersionAdded: '0.9'
4314
+ VersionChanged: '0.30'
4315
+ EnforcedStyle: slashes
4316
+ # slashes: Always use slashes.
4317
+ # percent_r: Always use `%r`.
4318
+ # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes.
4319
+ SupportedStyles:
4320
+ - slashes
4321
+ - percent_r
4322
+ - mixed
4323
+ # If `false`, the cop will always recommend using `%r` if one or more slashes
4324
+ # are found in the regexp string.
4325
+ AllowInnerSlashes: false
4326
+
4327
+ Style/RescueModifier:
4328
+ Description: 'Avoid using rescue in its modifier form.'
4329
+ StyleGuide: '#no-rescue-modifiers'
4330
+ Enabled: true
4331
+ VersionAdded: '0.9'
4332
+ VersionChanged: '0.34'
4333
+
4334
+ Style/RescueStandardError:
4335
+ Description: 'Avoid rescuing without specifying an error class.'
4336
+ Enabled: true
4337
+ VersionAdded: '0.52'
4338
+ EnforcedStyle: explicit
4339
+ # implicit: Do not include the error class, `rescue`
4340
+ # explicit: Require an error class `rescue StandardError`
4341
+ SupportedStyles:
4342
+ - implicit
4343
+ - explicit
4344
+
4345
+ Style/ReturnNil:
4346
+ Description: 'Use return instead of return nil.'
4347
+ Enabled: false
4348
+ EnforcedStyle: return
4349
+ SupportedStyles:
4350
+ - return
4351
+ - return_nil
4352
+ VersionAdded: '0.50'
4353
+
4354
+ Style/SafeNavigation:
4355
+ Description: >-
4356
+ This cop transforms usages of a method call safeguarded by
4357
+ a check for the existence of the object to
4358
+ safe navigation (`&.`).
4359
+ Auto-correction is unsafe as it assumes the object will
4360
+ be `nil` or truthy, but never `false`.
4361
+ Enabled: true
4362
+ VersionAdded: '0.43'
4363
+ VersionChanged: '0.77'
4364
+ # Safe navigation may cause a statement to start returning `nil` in addition
4365
+ # to whatever it used to return.
4366
+ ConvertCodeThatCanStartToReturnNil: false
4367
+ AllowedMethods:
4368
+ - present?
4369
+ - blank?
4370
+ - presence
4371
+ - try
4372
+ - try!
4373
+ SafeAutoCorrect: false
4374
+
4375
+ Style/Sample:
4376
+ Description: >-
4377
+ Use `sample` instead of `shuffle.first`,
4378
+ `shuffle.last`, and `shuffle[Integer]`.
4379
+ Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
4380
+ Enabled: true
4381
+ VersionAdded: '0.30'
4382
+
4383
+ Style/SelfAssignment:
4384
+ Description: >-
4385
+ Checks for places where self-assignment shorthand should have
4386
+ been used.
4387
+ StyleGuide: '#self-assignment'
4388
+ Enabled: true
4389
+ VersionAdded: '0.19'
4390
+ VersionChanged: '0.29'
4391
+
4392
+ Style/Semicolon:
4393
+ Description: "Don't use semicolons to terminate expressions."
4394
+ StyleGuide: '#no-semicolon'
4395
+ Enabled: true
4396
+ VersionAdded: '0.9'
4397
+ VersionChanged: '0.19'
4398
+ # Allow `;` to separate several expressions on the same line.
4399
+ AllowAsExpressionSeparator: false
4400
+
4401
+ Style/Send:
4402
+ Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.'
4403
+ StyleGuide: '#prefer-public-send'
4404
+ Enabled: false
4405
+ VersionAdded: '0.33'
4406
+
4407
+ Style/SignalException:
4408
+ Description: 'Checks for proper usage of fail and raise.'
4409
+ StyleGuide: '#prefer-raise-over-fail'
4410
+ Enabled: true
4411
+ VersionAdded: '0.11'
4412
+ VersionChanged: '0.37'
4413
+ EnforcedStyle: only_raise
4414
+ SupportedStyles:
4415
+ - only_raise
4416
+ - only_fail
4417
+ - semantic
4418
+
4419
+ Style/SingleArgumentDig:
4420
+ Description: 'Avoid using single argument dig method.'
4421
+ Enabled: true
4422
+ VersionAdded: '0.89'
4423
+ Safe: false
4424
+
4425
+ Style/SingleLineBlockParams:
4426
+ Description: 'Enforces the names of some block params.'
4427
+ Enabled: false
4428
+ VersionAdded: '0.16'
4429
+ VersionChanged: '1.6'
4430
+ Methods:
4431
+ - reduce:
4432
+ - acc
4433
+ - elem
4434
+ - inject:
4435
+ - acc
4436
+ - elem
4437
+
4438
+ Style/SingleLineMethods:
4439
+ Description: 'Avoid single-line methods.'
4440
+ StyleGuide: '#no-single-line-methods'
4441
+ Enabled: true
4442
+ VersionAdded: '0.9'
4443
+ VersionChanged: '1.8'
4444
+ AllowIfMethodIsEmpty: true
4445
+
4446
+ Style/SlicingWithRange:
4447
+ Description: 'Checks array slicing is done with endless ranges when suitable.'
4448
+ Enabled: true
4449
+ VersionAdded: '0.83'
4450
+ Safe: false
4451
+
4452
+ Style/SoleNestedConditional:
4453
+ Description: >-
4454
+ Finds sole nested conditional nodes
4455
+ which can be merged into outer conditional node.
4456
+ Enabled: true
4457
+ VersionAdded: '0.89'
4458
+ VersionChanged: '1.5'
4459
+ AllowModifier: false
4460
+
4461
+ Style/SpecialGlobalVars:
4462
+ Description: 'Avoid Perl-style global variables.'
4463
+ StyleGuide: '#no-cryptic-perlisms'
4464
+ Enabled: true
4465
+ VersionAdded: '0.13'
4466
+ VersionChanged: '0.36'
4467
+ SafeAutoCorrect: false
4468
+ EnforcedStyle: use_english_names
4469
+ SupportedStyles:
4470
+ - use_perl_names
4471
+ - use_english_names
4472
+
4473
+ Style/StabbyLambdaParentheses:
4474
+ Description: 'Check for the usage of parentheses around stabby lambda arguments.'
4475
+ StyleGuide: '#stabby-lambda-with-args'
4476
+ Enabled: true
4477
+ VersionAdded: '0.35'
4478
+ EnforcedStyle: require_parentheses
4479
+ SupportedStyles:
4480
+ - require_parentheses
4481
+ - require_no_parentheses
4482
+
4483
+ Style/StaticClass:
4484
+ Description: 'Prefer modules to classes with only class methods.'
4485
+ StyleGuide: '#modules-vs-classes'
4486
+ Enabled: false
4487
+ Safe: false
4488
+ VersionAdded: '1.3'
4489
+
4490
+ Style/StderrPuts:
4491
+ Description: 'Use `warn` instead of `$stderr.puts`.'
4492
+ StyleGuide: '#warn'
4493
+ Enabled: true
4494
+ VersionAdded: '0.51'
4495
+
4496
+ Style/StringConcatenation:
4497
+ Description: 'Checks for places where string concatenation can be replaced with string interpolation.'
4498
+ StyleGuide: '#string-interpolation'
4499
+ Enabled: true
4500
+ Safe: false
4501
+ VersionAdded: '0.89'
4502
+ VersionChanged: '1.6'
4503
+
4504
+ Style/StringHashKeys:
4505
+ Description: 'Prefer symbols instead of strings as hash keys.'
4506
+ StyleGuide: '#symbols-as-keys'
4507
+ Enabled: false
4508
+ VersionAdded: '0.52'
4509
+ VersionChanged: '0.75'
4510
+ Safe: false
4511
+
4512
+ Style/StringLiterals:
4513
+ Description: 'Checks if uses of quotes match the configured preference.'
4514
+ StyleGuide: '#consistent-string-literals'
4515
+ Enabled: true
4516
+ VersionAdded: '0.9'
4517
+ VersionChanged: '0.36'
4518
+ EnforcedStyle: single_quotes
4519
+ SupportedStyles:
4520
+ - single_quotes
4521
+ - double_quotes
4522
+ # If `true`, strings which span multiple lines using `\` for continuation must
4523
+ # use the same type of quotes on each line.
4524
+ ConsistentQuotesInMultiline: false
4525
+
4526
+ Style/StringLiteralsInInterpolation:
4527
+ Description: >-
4528
+ Checks if uses of quotes inside expressions in interpolated
4529
+ strings match the configured preference.
4530
+ Enabled: true
4531
+ VersionAdded: '0.27'
4532
+ EnforcedStyle: single_quotes
4533
+ SupportedStyles:
4534
+ - single_quotes
4535
+ - double_quotes
4536
+
4537
+ Style/StringMethods:
4538
+ Description: 'Checks if configured preferred methods are used over non-preferred.'
4539
+ Enabled: false
4540
+ VersionAdded: '0.34'
4541
+ VersionChanged: '0.34'
4542
+ # Mapping from undesired method to desired_method
4543
+ # e.g. to use `to_sym` over `intern`:
4544
+ #
4545
+ # StringMethods:
4546
+ # PreferredMethods:
4547
+ # intern: to_sym
4548
+ PreferredMethods:
4549
+ intern: to_sym
4550
+
4551
+ Style/Strip:
4552
+ Description: 'Use `strip` instead of `lstrip.rstrip`.'
4553
+ Enabled: true
4554
+ VersionAdded: '0.36'
4555
+
4556
+ Style/StructInheritance:
4557
+ Description: 'Checks for inheritance from Struct.new.'
4558
+ StyleGuide: '#no-extend-struct-new'
4559
+ Enabled: true
4560
+ VersionAdded: '0.29'
4561
+ VersionChanged: '0.86'
4562
+
4563
+ Style/SwapValues:
4564
+ Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
4565
+ StyleGuide: '#values-swapping'
4566
+ Enabled: pending
4567
+ VersionAdded: '1.1'
4568
+ SafeAutoCorrect: false
4569
+
4570
+ Style/SymbolArray:
4571
+ Description: 'Use %i or %I for arrays of symbols.'
4572
+ StyleGuide: '#percent-i'
4573
+ Enabled: true
4574
+ VersionAdded: '0.9'
4575
+ VersionChanged: '0.49'
4576
+ EnforcedStyle: percent
4577
+ MinSize: 2
4578
+ SupportedStyles:
4579
+ - percent
4580
+ - brackets
4581
+
4582
+ Style/SymbolLiteral:
4583
+ Description: 'Use plain symbols instead of string symbols when possible.'
4584
+ Enabled: true
4585
+ VersionAdded: '0.30'
4586
+
4587
+ Style/SymbolProc:
4588
+ Description: 'Use symbols as procs instead of blocks when possible.'
4589
+ Enabled: true
4590
+ Safe: false
4591
+ VersionAdded: '0.26'
4592
+ VersionChanged: '1.5'
4593
+ AllowMethodsWithArguments: false
4594
+ # A list of method names to be ignored by the check.
4595
+ # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
4596
+ IgnoredMethods:
4597
+ - respond_to
4598
+ - define_method
4599
+
4600
+ Style/TernaryParentheses:
4601
+ Description: 'Checks for use of parentheses around ternary conditions.'
4602
+ Enabled: true
4603
+ VersionAdded: '0.42'
4604
+ VersionChanged: '0.46'
4605
+ EnforcedStyle: require_no_parentheses
4606
+ SupportedStyles:
4607
+ - require_parentheses
4608
+ - require_no_parentheses
4609
+ - require_parentheses_when_complex
4610
+ AllowSafeAssignment: true
4611
+
4612
+ Style/TrailingBodyOnClass:
4613
+ Description: 'Class body goes below class statement.'
4614
+ Enabled: true
4615
+ VersionAdded: '0.53'
4616
+
4617
+ Style/TrailingBodyOnMethodDefinition:
4618
+ Description: 'Method body goes below definition.'
4619
+ Enabled: true
4620
+ VersionAdded: '0.52'
4621
+
4622
+ Style/TrailingBodyOnModule:
4623
+ Description: 'Module body goes below module statement.'
4624
+ Enabled: true
4625
+ VersionAdded: '0.53'
4626
+
4627
+ Style/TrailingCommaInArguments:
4628
+ Description: 'Checks for trailing comma in argument lists.'
4629
+ StyleGuide: '#no-trailing-params-comma'
4630
+ Enabled: true
4631
+ VersionAdded: '0.36'
4632
+ # If `comma`, the cop requires a comma after the last argument, but only for
4633
+ # parenthesized method calls where each argument is on its own line.
4634
+ # If `consistent_comma`, the cop requires a comma after the last argument,
4635
+ # for all parenthesized method calls with arguments.
4636
+ EnforcedStyleForMultiline: no_comma
4637
+ SupportedStylesForMultiline:
4638
+ - comma
4639
+ - consistent_comma
4640
+ - no_comma
4641
+
4642
+ Style/TrailingCommaInArrayLiteral:
4643
+ Description: 'Checks for trailing comma in array literals.'
4644
+ StyleGuide: '#no-trailing-array-commas'
4645
+ Enabled: true
4646
+ VersionAdded: '0.53'
4647
+ # If `comma`, the cop requires a comma after the last item in an array,
4648
+ # but only when each item is on its own line.
4649
+ # If `consistent_comma`, the cop requires a comma after the last item of all
4650
+ # non-empty, multiline array literals.
4651
+ EnforcedStyleForMultiline: no_comma
4652
+ SupportedStylesForMultiline:
4653
+ - comma
4654
+ - consistent_comma
4655
+ - no_comma
4656
+
4657
+ Style/TrailingCommaInBlockArgs:
4658
+ Description: 'Checks for useless trailing commas in block arguments.'
4659
+ Enabled: false
4660
+ Safe: false
4661
+ VersionAdded: '0.81'
4662
+
4663
+ Style/TrailingCommaInHashLiteral:
4664
+ Description: 'Checks for trailing comma in hash literals.'
4665
+ Enabled: true
4666
+ # If `comma`, the cop requires a comma after the last item in a hash,
4667
+ # but only when each item is on its own line.
4668
+ # If `consistent_comma`, the cop requires a comma after the last item of all
4669
+ # non-empty, multiline hash literals.
4670
+ EnforcedStyleForMultiline: no_comma
4671
+ SupportedStylesForMultiline:
4672
+ - comma
4673
+ - consistent_comma
4674
+ - no_comma
4675
+ VersionAdded: '0.53'
4676
+
4677
+ Style/TrailingMethodEndStatement:
4678
+ Description: 'Checks for trailing end statement on line of method body.'
4679
+ Enabled: true
4680
+ VersionAdded: '0.52'
4681
+
4682
+ Style/TrailingUnderscoreVariable:
4683
+ Description: >-
4684
+ Checks for the usage of unneeded trailing underscores at the
4685
+ end of parallel variable assignment.
4686
+ AllowNamedUnderscoreVariables: true
4687
+ Enabled: true
4688
+ VersionAdded: '0.31'
4689
+ VersionChanged: '0.35'
4690
+
4691
+ # `TrivialAccessors` requires exact name matches and doesn't allow
4692
+ # predicated methods by default.
4693
+ Style/TrivialAccessors:
4694
+ Description: 'Prefer attr_* methods to trivial readers/writers.'
4695
+ StyleGuide: '#attr_family'
4696
+ Enabled: true
4697
+ VersionAdded: '0.9'
4698
+ VersionChanged: '0.77'
4699
+ # When set to `false` the cop will suggest the use of accessor methods
4700
+ # in situations like:
4701
+ #
4702
+ # def name
4703
+ # @other_name
4704
+ # end
4705
+ #
4706
+ # This way you can uncover "hidden" attributes in your code.
4707
+ ExactNameMatch: true
4708
+ AllowPredicates: true
4709
+ # Allows trivial writers that don't end in an equal sign. e.g.
4710
+ #
4711
+ # def on_exception(action)
4712
+ # @on_exception=action
4713
+ # end
4714
+ # on_exception :restart
4715
+ #
4716
+ # Commonly used in DSLs
4717
+ AllowDSLWriters: false
4718
+ IgnoreClassMethods: false
4719
+ AllowedMethods:
4720
+ - to_ary
4721
+ - to_a
4722
+ - to_c
4723
+ - to_enum
4724
+ - to_h
4725
+ - to_hash
4726
+ - to_i
4727
+ - to_int
4728
+ - to_io
4729
+ - to_open
4730
+ - to_path
4731
+ - to_proc
4732
+ - to_r
4733
+ - to_regexp
4734
+ - to_str
4735
+ - to_s
4736
+ - to_sym
4737
+
4738
+ Style/UnlessElse:
4739
+ Description: >-
4740
+ Do not use unless with else. Rewrite these with the positive
4741
+ case first.
4742
+ StyleGuide: '#no-else-with-unless'
4743
+ Enabled: true
4744
+ VersionAdded: '0.9'
4745
+
4746
+ Style/UnlessLogicalOperators:
4747
+ Description: >-
4748
+ Checks for use of logical operators in an unless condition.
4749
+ Enabled: false
4750
+ VersionAdded: '1.11'
4751
+ EnforcedStyle: forbid_mixed_logical_operators
4752
+ SupportedStyles:
4753
+ - forbid_mixed_logical_operators
4754
+ - forbid_logical_operators
4755
+
4756
+ Style/UnpackFirst:
4757
+ Description: >-
4758
+ Checks for accessing the first element of `String#unpack`
4759
+ instead of using `unpack1`.
4760
+ Enabled: true
4761
+ VersionAdded: '0.54'
4762
+
4763
+ Style/VariableInterpolation:
4764
+ Description: >-
4765
+ Don't interpolate global, instance and class variables
4766
+ directly in strings.
4767
+ StyleGuide: '#curlies-interpolate'
4768
+ Enabled: true
4769
+ VersionAdded: '0.9'
4770
+ VersionChanged: '0.20'
4771
+
4772
+ Style/WhenThen:
4773
+ Description: 'Use when x then ... for one-line cases.'
4774
+ StyleGuide: '#one-line-cases'
4775
+ Enabled: true
4776
+ VersionAdded: '0.9'
4777
+
4778
+ Style/WhileUntilDo:
4779
+ Description: 'Checks for redundant do after while or until.'
4780
+ StyleGuide: '#no-multiline-while-do'
4781
+ Enabled: true
4782
+ VersionAdded: '0.9'
4783
+
4784
+ Style/WhileUntilModifier:
4785
+ Description: >-
4786
+ Favor modifier while/until usage when you have a
4787
+ single-line body.
4788
+ StyleGuide: '#while-as-a-modifier'
4789
+ Enabled: true
4790
+ VersionAdded: '0.9'
4791
+ VersionChanged: '0.30'
4792
+
4793
+ Style/WordArray:
4794
+ Description: 'Use %w or %W for arrays of words.'
4795
+ StyleGuide: '#percent-w'
4796
+ Enabled: true
4797
+ VersionAdded: '0.9'
4798
+ VersionChanged: '0.36'
4799
+ EnforcedStyle: percent
4800
+ SupportedStyles:
4801
+ # percent style: %w(word1 word2)
4802
+ - percent
4803
+ # bracket style: ['word1', 'word2']
4804
+ - brackets
4805
+ # The `MinSize` option causes the `WordArray` rule to be ignored for arrays
4806
+ # smaller than a certain size. The rule is only applied to arrays
4807
+ # whose element count is greater than or equal to `MinSize`.
4808
+ MinSize: 2
4809
+ # The regular expression `WordRegex` decides what is considered a word.
4810
+ WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/'
4811
+
4812
+ Style/YodaCondition:
4813
+ Description: 'Forbid or enforce yoda conditions.'
4814
+ Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'
4815
+ Enabled: true
4816
+ EnforcedStyle: forbid_for_all_comparison_operators
4817
+ SupportedStyles:
4818
+ # check all comparison operators
4819
+ - forbid_for_all_comparison_operators
4820
+ # check only equality operators: `!=` and `==`
4821
+ - forbid_for_equality_operators_only
4822
+ # enforce yoda for all comparison operators
4823
+ - require_for_all_comparison_operators
4824
+ # enforce yoda only for equality operators: `!=` and `==`
4825
+ - require_for_equality_operators_only
4826
+ Safe: false
4827
+ VersionAdded: '0.49'
4828
+ VersionChanged: '0.75'
4829
+
4830
+ Style/ZeroLengthPredicate:
4831
+ Description: 'Use #empty? when testing for objects of length 0.'
4832
+ Enabled: true
4833
+ Safe: false
4834
+ VersionAdded: '0.37'
4835
+ VersionChanged: '0.39'