chefstyle 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -73,7 +73,7 @@ AllCops:
73
73
  DisplayStyleGuide: false
74
74
  # When specifying style guide URLs, any paths and/or fragments will be
75
75
  # evaluated relative to the base URL.
76
- StyleGuideBaseURL: https://github.com/rubocop-hq/ruby-style-guide
76
+ StyleGuideBaseURL: https://rubystyle.guide
77
77
  # Extra details are not displayed in offense messages by default. Change
78
78
  # behavior by overriding ExtraDetails, or by giving the
79
79
  # `-E/--extra-details` option.
@@ -123,16 +123,8 @@ AllCops:
123
123
  # followed by the Gemfile.lock or gems.locked file. (Although the Ruby version
124
124
  # is specified in the Gemfile or gems.rb file, RuboCop reads the final value
125
125
  # from the lock file.) If the Ruby version is still unresolved, RuboCop will
126
- # use the oldest officially supported Ruby version (currently Ruby 2.2).
126
+ # use the oldest officially supported Ruby version (currently Ruby 2.3).
127
127
  TargetRubyVersion: ~
128
- # What version of Rails is the inspected code using? If a value is specified
129
- # for TargetRailsVersion then it is used. Acceptable values are specificed
130
- # as a float (i.e. 5.1); the patch version of Rails should not be included.
131
- # If TargetRailsVersion is not set, RuboCop will parse the Gemfile.lock or
132
- # gems.locked file to find the version of Rails that has been bound to the
133
- # application. If neither of those files exist, RuboCop will use Rails 5.0
134
- # as the default.
135
- TargetRailsVersion: ~
136
128
 
137
129
  #################### Bundler ###############################
138
130
 
@@ -203,6 +195,13 @@ Gemspec/RequiredRubyVersion:
203
195
  VersionAdded: '0.52'
204
196
  Include:
205
197
  - '**/*.gemspec'
198
+ -
199
+ Gemspec/RubyVersionGlobalsUsage:
200
+ Description: Checks usage of RUBY_VERSION in gemspec.
201
+ Enabled: true
202
+ VersionAdded: '0.72'
203
+ Include:
204
+ - '**/*.gemspec'
206
205
 
207
206
  #################### Layout ###########################
208
207
 
@@ -219,6 +218,34 @@ Layout/AccessModifierIndentation:
219
218
  # But it can be overridden by setting this parameter
220
219
  IndentationWidth: ~
221
220
 
221
+ Layout/AlignArguments:
222
+ Description: >-
223
+ Align the arguments of a method call if they span more
224
+ than one line.
225
+ StyleGuide: '#no-double-indent'
226
+ Enabled: true
227
+ VersionAdded: '0.68'
228
+ # Alignment of arguments in multi-line method calls.
229
+ #
230
+ # The `with_first_argument` style aligns the following lines along the same
231
+ # column as the first parameter.
232
+ #
233
+ # method_call(a,
234
+ # b)
235
+ #
236
+ # The `with_fixed_indentation` style aligns the following lines with one
237
+ # level of indentation relative to the start of the line with the method call.
238
+ #
239
+ # method_call(a,
240
+ # b)
241
+ EnforcedStyle: with_first_argument
242
+ SupportedStyles:
243
+ - with_first_argument
244
+ - with_fixed_indentation
245
+ # By default, the indentation width from Layout/IndentationWidth is used
246
+ # But it can be overridden by setting this parameter
247
+ IndentationWidth: ~
248
+
222
249
  Layout/AlignArray:
223
250
  Description: >-
224
251
  Align the elements of an array literal if they span more than
@@ -232,6 +259,7 @@ Layout/AlignHash:
232
259
  Align the elements of a hash literal if they span more than
233
260
  one line.
234
261
  Enabled: true
262
+ AllowMultipleStyles: true
235
263
  VersionAdded: '0.49'
236
264
  # Alignment of entries using hash rocket as separator. Valid values are:
237
265
  #
@@ -305,23 +333,24 @@ Layout/AlignHash:
305
333
 
306
334
  Layout/AlignParameters:
307
335
  Description: >-
308
- Align the parameters of a method call if they span more
336
+ Align the parameters of a method definition if they span more
309
337
  than one line.
310
338
  StyleGuide: '#no-double-indent'
311
339
  Enabled: true
312
340
  VersionAdded: '0.49'
341
+ VersionChanged: '0.68'
313
342
  # Alignment of parameters in multi-line method calls.
314
343
  #
315
344
  # The `with_first_parameter` style aligns the following lines along the same
316
345
  # column as the first parameter.
317
346
  #
318
- # method_call(a,
319
- # b)
347
+ # def method_foo(a,
348
+ # b)
320
349
  #
321
350
  # The `with_fixed_indentation` style aligns the following lines with one
322
351
  # level of indentation relative to the start of the line with the method call.
323
352
  #
324
- # method_call(a,
353
+ # def method_foo(a,
325
354
  # b)
326
355
  EnforcedStyle: with_first_parameter
327
356
  SupportedStyles:
@@ -368,7 +397,7 @@ Layout/CaseIndentation:
368
397
 
369
398
  Layout/ClassStructure:
370
399
  Description: 'Enforces a configured order of definitions within a class body.'
371
- StyleGuide: 'https://github.com/rubocop-hq/ruby-style-guide#consistent-classes'
400
+ StyleGuide: '#consistent-classes'
372
401
  Enabled: false
373
402
  VersionAdded: '0.52'
374
403
  Categories:
@@ -479,6 +508,13 @@ Layout/EmptyLinesAroundAccessModifier:
479
508
  StyleGuide: '#empty-lines-around-access-modifier'
480
509
  Enabled: true
481
510
  VersionAdded: '0.49'
511
+ EnforcedStyle: around
512
+ SupportedStyles:
513
+ - around
514
+ - only_before
515
+ Reference:
516
+ # A reference to `EnforcedStyle: only_before`.
517
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
482
518
 
483
519
  Layout/EmptyLinesAroundArguments:
484
520
  Description: "Keeps track of empty lines around method arguments."
@@ -581,6 +617,10 @@ Layout/ExtraSpacing:
581
617
  # things with the previous or next line, not counting empty lines or comment
582
618
  # lines.
583
619
  AllowForAlignment: true
620
+ # When true, allows things like 'obj.meth(arg) # comment',
621
+ # rather than insisting on 'obj.meth(arg) # comment'.
622
+ # If done for alignment, either this OR AllowForAlignment will allow it.
623
+ AllowBeforeTrailingComments: false
584
624
  # When true, forces the alignment of `=` in assignments on consecutive lines.
585
625
  ForceEqualSignAlignment: false
586
626
 
@@ -612,11 +652,28 @@ Layout/FirstMethodParameterLineBreak:
612
652
  Enabled: false
613
653
  VersionAdded: '0.49'
614
654
 
615
- Layout/FirstParameterIndentation:
616
- Description: 'Checks the indentation of the first parameter in a method call.'
655
+ Layout/HeredocArgumentClosingParenthesis:
656
+ Description: >-
657
+ Checks for the placement of the closing parenthesis in a
658
+ method call that passes a HEREDOC string as an argument.
659
+ Enabled: false
660
+ StyleGuide: '#heredoc-argument-closing-parentheses'
661
+ VersionAdded: '0.68'
662
+
663
+ Layout/IndentAssignment:
664
+ Description: >-
665
+ Checks the indentation of the first line of the
666
+ right-hand-side of a multi-line assignment.
617
667
  Enabled: true
618
668
  VersionAdded: '0.49'
619
- VersionChanged: '0.56'
669
+ # By default, the indentation width from `Layout/IndentationWidth` is used
670
+ # But it can be overridden by setting this parameter
671
+ IndentationWidth: ~
672
+
673
+ Layout/IndentFirstArgument:
674
+ Description: 'Checks the indentation of the first argument in a method call.'
675
+ Enabled: true
676
+ VersionAdded: '0.68'
620
677
  EnforcedStyle: special_for_inner_method_call_in_parentheses
621
678
  SupportedStyles:
622
679
  # The first parameter should always be indented one step more than the
@@ -637,12 +694,12 @@ Layout/FirstParameterIndentation:
637
694
  # But it can be overridden by setting this parameter
638
695
  IndentationWidth: ~
639
696
 
640
- Layout/IndentArray:
697
+ Layout/IndentFirstArrayElement:
641
698
  Description: >-
642
699
  Checks the indentation of the first element in an array
643
700
  literal.
644
701
  Enabled: true
645
- VersionAdded: '0.49'
702
+ VersionAdded: '0.68'
646
703
  # The value `special_inside_parentheses` means that array literals with
647
704
  # brackets that have their opening bracket on the same line as a surrounding
648
705
  # opening round parenthesis, shall have their first element indented relative
@@ -663,20 +720,10 @@ Layout/IndentArray:
663
720
  # But it can be overridden by setting this parameter
664
721
  IndentationWidth: ~
665
722
 
666
- Layout/IndentAssignment:
667
- Description: >-
668
- Checks the indentation of the first line of the
669
- right-hand-side of a multi-line assignment.
670
- Enabled: true
671
- VersionAdded: '0.49'
672
- # By default, the indentation width from `Layout/IndentationWidth` is used
673
- # But it can be overridden by setting this parameter
674
- IndentationWidth: ~
675
-
676
- Layout/IndentHash:
723
+ Layout/IndentFirstHashElement:
677
724
  Description: 'Checks the indentation of the first key in a hash literal.'
678
725
  Enabled: true
679
- VersionAdded: '0.49'
726
+ VersionAdded: '0.68'
680
727
  # The value `special_inside_parentheses` means that hash literals with braces
681
728
  # that have their opening brace on the same line as a surrounding opening
682
729
  # round parenthesis, shall have their first key indented relative to the
@@ -697,14 +744,29 @@ Layout/IndentHash:
697
744
  # But it can be overridden by setting this parameter
698
745
  IndentationWidth: ~
699
746
 
747
+ Layout/IndentFirstParameter:
748
+ Description: >-
749
+ Checks the indentation of the first parameter in a
750
+ method definition.
751
+ Enabled: true
752
+ VersionAdded: '0.49'
753
+ VersionChanged: '0.68'
754
+ EnforcedStyle: consistent
755
+ SupportedStyles:
756
+ - consistent
757
+ - align_parentheses
758
+ # By default, the indentation width from `Layout/IndentationWidth` is used
759
+ # But it can be overridden by setting this parameter
760
+ IndentationWidth: ~
761
+
700
762
  Layout/IndentHeredoc:
701
763
  Description: 'This cop checks the indentation of the here document bodies.'
702
764
  StyleGuide: '#squiggly-heredocs'
703
765
  Enabled: true
704
766
  VersionAdded: '0.49'
705
- EnforcedStyle: auto_detection
767
+ VersionChanged: '0.69'
768
+ EnforcedStyle: squiggly
706
769
  SupportedStyles:
707
- - auto_detection
708
770
  - squiggly
709
771
  - active_support
710
772
  - powerpack
@@ -715,8 +777,8 @@ Layout/IndentationConsistency:
715
777
  StyleGuide: '#spaces-indentation'
716
778
  Enabled: true
717
779
  VersionAdded: '0.49'
718
- # The difference between `rails` and `normal` is that the `rails` style
719
- # prescribes that in classes and modules the `protected` and `private`
780
+ # The difference between `indented` and `normal` is that the `indented_internal_methods`
781
+ # style prescribes that in classes and modules the `protected` and `private`
720
782
  # modifier keywords shall be indented the same as public methods and that
721
783
  # protected and private members shall be indented one step more than the
722
784
  # modifiers. Other than that, both styles mean that entities on the same
@@ -724,7 +786,10 @@ Layout/IndentationConsistency:
724
786
  EnforcedStyle: normal
725
787
  SupportedStyles:
726
788
  - normal
727
- - rails
789
+ - indented_internal_methods
790
+ Reference:
791
+ # A reference to `EnforcedStyle: indented_internal_methods`.
792
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
728
793
 
729
794
  Layout/IndentationWidth:
730
795
  Description: 'Use 2 spaces for indentation.'
@@ -751,6 +816,8 @@ Layout/LeadingCommentSpace:
751
816
  StyleGuide: '#hash-space'
752
817
  Enabled: true
753
818
  VersionAdded: '0.49'
819
+ VersionChanged: '0.73'
820
+ AllowDoxygenCommentStyle: false
754
821
 
755
822
  Layout/MultilineArrayBraceLayout:
756
823
  Description: >-
@@ -768,6 +835,13 @@ Layout/MultilineArrayBraceLayout:
768
835
  - new_line
769
836
  - same_line
770
837
 
838
+ Layout/MultilineArrayLineBreaks:
839
+ Description: >-
840
+ Checks that each item in a multi-line array literal
841
+ starts on a separate line.
842
+ Enabled: false
843
+ VersionAdded: '0.67'
844
+
771
845
  Layout/MultilineAssignmentLayout:
772
846
  Description: 'Check for a newline after the assignment operator in multi-line assignments.'
773
847
  StyleGuide: '#indent-conditional-assignment'
@@ -811,6 +885,20 @@ Layout/MultilineHashBraceLayout:
811
885
  - new_line
812
886
  - same_line
813
887
 
888
+ Layout/MultilineHashKeyLineBreaks:
889
+ Description: >-
890
+ Checks that each item in a multi-line hash literal
891
+ starts on a separate line.
892
+ Enabled: false
893
+ VersionAdded: '0.67'
894
+
895
+ Layout/MultilineMethodArgumentLineBreaks:
896
+ Description: >-
897
+ Checks that each argument in a multi-line method call
898
+ starts on a separate line.
899
+ Enabled: false
900
+ VersionAdded: '0.67'
901
+
814
902
  Layout/MultilineMethodCallBraceLayout:
815
903
  Description: >-
816
904
  Checks that the closing brace in a method call is
@@ -1191,6 +1279,12 @@ Lint/DeprecatedClassMethods:
1191
1279
  Enabled: true
1192
1280
  VersionAdded: '0.19'
1193
1281
 
1282
+ Lint/DisjunctiveAssignmentInConstructor:
1283
+ Description: 'In constructor, plain assignment is preferred over disjunctive.'
1284
+ Enabled: true
1285
+ Safe: false
1286
+ VersionAdded: '0.62'
1287
+
1194
1288
  Lint/DuplicateCaseCondition:
1195
1289
  Description: 'Do not repeat values in case conditionals.'
1196
1290
  Enabled: true
@@ -1255,6 +1349,12 @@ Lint/ErbNewArguments:
1255
1349
  Enabled: true
1256
1350
  VersionAdded: '0.56'
1257
1351
 
1352
+ Lint/FlipFlop:
1353
+ Description: 'Checks for flip-flops.'
1354
+ StyleGuide: '#no-flip-flops'
1355
+ Enabled: true
1356
+ VersionAdded: '0.16'
1357
+
1258
1358
  Lint/FloatOutOfRange:
1259
1359
  Description: >-
1260
1360
  Catches floating-point literals too large or small for Ruby to
@@ -1271,7 +1371,17 @@ Lint/HandleExceptions:
1271
1371
  Description: "Don't suppress exception."
1272
1372
  StyleGuide: '#dont-hide-exceptions'
1273
1373
  Enabled: true
1374
+ AllowComments: false
1274
1375
  VersionAdded: '0.9'
1376
+ VersionChanged: '0.70'
1377
+
1378
+ Lint/HeredocMethodCallPosition:
1379
+ Description: >-
1380
+ Checks for the ordering of a method call where
1381
+ the receiver of the call is a HEREDOC.
1382
+ Enabled: false
1383
+ StyleGuide: '#heredoc-method-calls'
1384
+ VersionAdded: '0.68'
1275
1385
 
1276
1386
  Lint/ImplicitStringConcatenation:
1277
1387
  Description: >-
@@ -1298,7 +1408,7 @@ Lint/InheritException:
1298
1408
  - standard_error
1299
1409
 
1300
1410
  Lint/InterpolationCheck:
1301
- Description: 'Raise warning for interpolation in single q strs'
1411
+ Description: 'Raise warning for interpolation in single q strs.'
1302
1412
  Enabled: true
1303
1413
  VersionAdded: '0.50'
1304
1414
 
@@ -1322,7 +1432,7 @@ Lint/Loop:
1322
1432
  VersionAdded: '0.9'
1323
1433
 
1324
1434
  Lint/MissingCopEnableDirective:
1325
- Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`'
1435
+ Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
1326
1436
  Enabled: true
1327
1437
  VersionAdded: '0.52'
1328
1438
  # Maximum number of consecutive lines the cop can be disabled for.
@@ -1366,6 +1476,8 @@ Lint/NumberConversion:
1366
1476
  Description: 'Checks unsafe usage of number conversion methods.'
1367
1477
  Enabled: false
1368
1478
  VersionAdded: '0.53'
1479
+ VersionChanged: '0.70'
1480
+ SafeAutoCorrect: false
1369
1481
 
1370
1482
  Lint/OrderedMagicComments:
1371
1483
  Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
@@ -1384,6 +1496,7 @@ Lint/PercentStringArray:
1384
1496
  Description: >-
1385
1497
  Checks for unwanted commas and quotes in %w/%W literals.
1386
1498
  Enabled: true
1499
+ Safe: false
1387
1500
  VersionAdded: '0.41'
1388
1501
 
1389
1502
  Lint/PercentSymbolArray:
@@ -1467,6 +1580,11 @@ Lint/SafeNavigationConsistency:
1467
1580
  - try!
1468
1581
 
1469
1582
 
1583
+ Lint/SafeNavigationWithEmpty:
1584
+ Description: 'Avoid `foo&.empty?` in conditionals.'
1585
+ Enabled: true
1586
+ VersionAdded: '0.62'
1587
+
1470
1588
  Lint/ScriptPermission:
1471
1589
  Description: 'Grant script file execute permission.'
1472
1590
  Enabled: true
@@ -1502,18 +1620,23 @@ Lint/StringConversionInInterpolation:
1502
1620
  VersionChanged: '0.20'
1503
1621
 
1504
1622
  Lint/Syntax:
1505
- Description: 'Checks syntax error'
1623
+ Description: 'Checks syntax error.'
1506
1624
  Enabled: true
1507
1625
  VersionAdded: '0.9'
1508
1626
 
1509
1627
 
1628
+ Lint/ToJSON:
1629
+ Description: 'Ensure #to_json includes an optional argument.'
1630
+ Enabled: true
1631
+
1510
1632
  Lint/UnderscorePrefixedVariableName:
1511
1633
  Description: 'Do not use prefix `_` for a variable that is used.'
1512
1634
  Enabled: true
1513
1635
  VersionAdded: '0.21'
1636
+ AllowKeywordBlockArguments: false
1514
1637
 
1515
1638
  Lint/UnifiedInteger:
1516
- Description: 'Use Integer instead of Fixnum or Bignum'
1639
+ Description: 'Use Integer instead of Fixnum or Bignum.'
1517
1640
  Enabled: true
1518
1641
  VersionAdded: '0.43'
1519
1642
 
@@ -1536,7 +1659,7 @@ Lint/UnneededRequireStatement:
1536
1659
  VersionAdded: '0.51'
1537
1660
 
1538
1661
  Lint/UnneededSplatExpansion:
1539
- Description: 'Checks for splat unnecessarily being called on literals'
1662
+ Description: 'Checks for splat unnecessarily being called on literals.'
1540
1663
  Enabled: true
1541
1664
  VersionAdded: '0.43'
1542
1665
 
@@ -1620,9 +1743,12 @@ Metrics/AbcSize:
1620
1743
  Description: >-
1621
1744
  A calculated magnitude based on number of assignments,
1622
1745
  branches, and conditions.
1623
- Reference: 'http://c2.com/cgi/wiki?AbcMetric'
1746
+ Reference:
1747
+ - http://c2.com/cgi/wiki?AbcMetric
1748
+ - https://en.wikipedia.org/wiki/ABC_Software_Metric'
1624
1749
  Enabled: true
1625
1750
  VersionAdded: '0.27'
1751
+ VersionChanged: '0.66'
1626
1752
  # The ABC size is a calculated magnitude, so this number can be an Integer or
1627
1753
  # a Float.
1628
1754
  Max: 15
@@ -1631,16 +1757,18 @@ Metrics/BlockLength:
1631
1757
  Description: 'Avoid long blocks with many lines.'
1632
1758
  Enabled: true
1633
1759
  VersionAdded: '0.44'
1634
- VersionChanged: '0.58'
1760
+ VersionChanged: '0.66'
1635
1761
  CountComments: false # count full line comments?
1636
1762
  Max: 25
1637
1763
  ExcludedMethods:
1638
1764
  # By default, exclude the `#refine` method, as it tends to have larger
1639
1765
  # associated blocks.
1640
1766
  - refine
1767
+ Exclude:
1768
+ - '**/*.gemspec'
1641
1769
 
1642
1770
  Metrics/BlockNesting:
1643
- Description: 'Avoid excessive block nesting'
1771
+ Description: 'Avoid excessive block nesting.'
1644
1772
  StyleGuide: '#three-is-the-number-thou-shalt-count'
1645
1773
  Enabled: true
1646
1774
  VersionAdded: '0.25'
@@ -1669,7 +1797,8 @@ Metrics/LineLength:
1669
1797
  StyleGuide: '#80-character-limits'
1670
1798
  Enabled: true
1671
1799
  VersionAdded: '0.25'
1672
- VersionChanged: '0.46'
1800
+ VersionChanged: '0.68'
1801
+ AutoCorrect: false
1673
1802
  Max: 80
1674
1803
  # To make it possible to copy or click on URIs in the code, we allow lines
1675
1804
  # containing a URI to be longer than Max.
@@ -1884,6 +2013,13 @@ Naming/PredicateName:
1884
2013
  Exclude:
1885
2014
  - 'spec/**/*'
1886
2015
 
2016
+ Naming/RescuedExceptionsVariableName:
2017
+ Description: 'Use consistent rescued exceptions variables naming.'
2018
+ Enabled: true
2019
+ VersionAdded: '0.67'
2020
+ VersionChanged: '0.68'
2021
+ PreferredName: e
2022
+
1887
2023
  Naming/UncommunicativeBlockParamName:
1888
2024
  Description: >-
1889
2025
  Checks for block parameter names that contain capital letters,
@@ -1943,650 +2079,6 @@ Naming/VariableNumber:
1943
2079
  - normalcase
1944
2080
  - non_integer
1945
2081
 
1946
- #################### Performance ###########################
1947
-
1948
- Performance/Caller:
1949
- Description: >-
1950
- Use `caller(n..n)` instead of `caller`.
1951
- Enabled: true
1952
- VersionAdded: '0.49'
1953
-
1954
- Performance/CaseWhenSplat:
1955
- Description: >-
1956
- Reordering `when` conditions with a splat to the end
1957
- of the `when` branches can improve performance.
1958
- Enabled: false
1959
- AutoCorrect: false
1960
- SafeAutoCorrect: false
1961
- VersionAdded: '0.34'
1962
- VersionChanged: '0.59'
1963
-
1964
- Performance/Casecmp:
1965
- Description: >-
1966
- Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`..
1967
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringcasecmp-vs-stringdowncase---code'
1968
- Enabled: true
1969
- VersionAdded: '0.36'
1970
-
1971
- Performance/ChainArrayAllocation:
1972
- Description: >-
1973
- Instead of chaining array methods that allocate new arrays, mutate an
1974
- existing array.
1975
- Reference: 'https://twitter.com/schneems/status/1034123879978029057'
1976
- Enabled: false
1977
- VersionAdded: '0.59'
1978
-
1979
- Performance/CompareWithBlock:
1980
- Description: 'Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`.'
1981
- Enabled: true
1982
- VersionAdded: '0.46'
1983
-
1984
- Performance/Count:
1985
- Description: >-
1986
- Use `count` instead of `select...size`, `reject...size`,
1987
- `select...count`, `reject...count`, `select...length`,
1988
- and `reject...length`.
1989
- # This cop has known compatibility issues with `ActiveRecord` and other
1990
- # frameworks. ActiveRecord's `count` ignores the block that is passed to it.
1991
- # For more information, see the documentation in the cop itself.
1992
- # If you understand the known risk, you can disable `SafeMode`.
1993
- SafeMode: true
1994
- Enabled: true
1995
- VersionAdded: '0.31'
1996
- VersionChanged: '0.39'
1997
-
1998
- Performance/Detect:
1999
- Description: >-
2000
- Use `detect` instead of `select.first`, `find_all.first`,
2001
- `select.last`, and `find_all.last`.
2002
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code'
2003
- # This cop has known compatibility issues with `ActiveRecord` and other
2004
- # frameworks. `ActiveRecord` does not implement a `detect` method and `find`
2005
- # has its own meaning. Correcting `ActiveRecord` methods with this cop
2006
- # should be considered unsafe.
2007
- SafeMode: true
2008
- Enabled: true
2009
- VersionAdded: '0.30'
2010
- VersionChanged: '0.39'
2011
-
2012
- Performance/DoubleStartEndWith:
2013
- Description: >-
2014
- Use `str.{start,end}_with?(x, ..., y, ...)`
2015
- instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`.
2016
- Enabled: true
2017
- VersionAdded: '0.36'
2018
- VersionChanged: '0.48'
2019
- # Used to check for `starts_with?` and `ends_with?`.
2020
- # These methods are defined by `ActiveSupport`.
2021
- IncludeActiveSupportAliases: false
2022
-
2023
- Performance/EndWith:
2024
- Description: 'Use `end_with?` instead of a regex match anchored to the end of a string.'
2025
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
2026
- # This will change to a new method call which isn't guaranteed to be on the
2027
- # object. Switching these methods has to be done with knowledge of the types
2028
- # of the variables which rubocop doesn't have.
2029
- SafeAutoCorrect: false
2030
- AutoCorrect: false
2031
- Enabled: true
2032
- VersionAdded: '0.36'
2033
- VersionChanged: '0.44'
2034
-
2035
- Performance/FixedSize:
2036
- Description: 'Do not compute the size of statically sized objects except in constants'
2037
- Enabled: true
2038
- VersionAdded: '0.35'
2039
-
2040
- Performance/FlatMap:
2041
- Description: >-
2042
- Use `Enumerable#flat_map`
2043
- instead of `Enumerable#map...Array#flatten(1)`
2044
- or `Enumberable#collect..Array#flatten(1)`
2045
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code'
2046
- Enabled: true
2047
- VersionAdded: '0.30'
2048
- EnabledForFlattenWithoutParams: false
2049
- # If enabled, this cop will warn about usages of
2050
- # `flatten` being called without any parameters.
2051
- # This can be dangerous since `flat_map` will only flatten 1 level, and
2052
- # `flatten` without any parameters can flatten multiple levels.
2053
-
2054
- Performance/InefficientHashSearch:
2055
- Description: 'Use `key?` or `value?` instead of `keys.include?` or `values.include?`'
2056
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashkey-instead-of-hashkeysinclude-code'
2057
- Enabled: true
2058
- VersionAdded: '0.56'
2059
- Safe: false
2060
-
2061
- Performance/LstripRstrip:
2062
- Description: 'Use `strip` instead of `lstrip.rstrip`.'
2063
- Enabled: true
2064
- VersionAdded: '0.36'
2065
-
2066
- Performance/OpenStruct:
2067
- Description: 'Use `Struct` instead of `OpenStruct`.'
2068
- Enabled: false
2069
- VersionAdded: '0.61'
2070
- Safe: false
2071
-
2072
- Performance/RangeInclude:
2073
- Description: 'Use `Range#cover?` instead of `Range#include?`.'
2074
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code'
2075
- Enabled: true
2076
- VersionAdded: '0.36'
2077
-
2078
- Performance/RedundantBlockCall:
2079
- Description: 'Use `yield` instead of `block.call`.'
2080
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode'
2081
- Enabled: true
2082
- VersionAdded: '0.36'
2083
-
2084
- Performance/RedundantMatch:
2085
- Description: >-
2086
- Use `=~` instead of `String#match` or `Regexp#match` in a context where the
2087
- returned `MatchData` is not needed.
2088
- Enabled: true
2089
- VersionAdded: '0.36'
2090
-
2091
- Performance/RedundantMerge:
2092
- Description: 'Use Hash#[]=, rather than Hash#merge! with a single key-value pair.'
2093
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashmerge-vs-hash-code'
2094
- Enabled: true
2095
- VersionAdded: '0.36'
2096
- # Max number of key-value pairs to consider an offense
2097
- MaxKeyValuePairs: 2
2098
-
2099
- Performance/RedundantSortBy:
2100
- Description: 'Use `sort` instead of `sort_by { |x| x }`.'
2101
- Enabled: true
2102
- VersionAdded: '0.36'
2103
-
2104
- Performance/RegexpMatch:
2105
- Description: >-
2106
- Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`,
2107
- `Regexp#===`, or `=~` when `MatchData` is not used.
2108
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#regexp-vs-stringmatch-vs-string-vs-stringmatch-code-'
2109
- Enabled: true
2110
- VersionAdded: '0.47'
2111
-
2112
- Performance/ReverseEach:
2113
- Description: 'Use `reverse_each` instead of `reverse.each`.'
2114
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code'
2115
- Enabled: true
2116
- VersionAdded: '0.30'
2117
-
2118
- Performance/Sample:
2119
- Description: >-
2120
- Use `sample` instead of `shuffle.first`,
2121
- `shuffle.last`, and `shuffle[Integer]`.
2122
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
2123
- Enabled: true
2124
- VersionAdded: '0.30'
2125
-
2126
- Performance/Size:
2127
- Description: >-
2128
- Use `size` instead of `count` for counting
2129
- the number of elements in `Array` and `Hash`.
2130
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#arraylength-vs-arraysize-vs-arraycount-code'
2131
- Enabled: true
2132
- VersionAdded: '0.30'
2133
-
2134
- Performance/StartWith:
2135
- Description: 'Use `start_with?` instead of a regex match anchored to the beginning of a string.'
2136
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
2137
- # This will change to a new method call which isn't guaranteed to be on the
2138
- # object. Switching these methods has to be done with knowledge of the types
2139
- # of the variables which rubocop doesn't have.
2140
- SafeAutoCorrect: false
2141
- AutoCorrect: false
2142
- Enabled: true
2143
- VersionAdded: '0.36'
2144
- VersionChanged: '0.44'
2145
-
2146
- Performance/StringReplacement:
2147
- Description: >-
2148
- Use `tr` instead of `gsub` when you are replacing the same
2149
- number of characters. Use `delete` instead of `gsub` when
2150
- you are deleting characters.
2151
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code'
2152
- Enabled: true
2153
- VersionAdded: '0.33'
2154
-
2155
- Performance/TimesMap:
2156
- Description: 'Checks for .times.map calls.'
2157
- AutoCorrect: false
2158
- Enabled: true
2159
- VersionAdded: '0.36'
2160
- VersionChanged: '0.50'
2161
- SafeAutoCorrect: false # see https://github.com/rubocop-hq/rubocop/issues/4658
2162
-
2163
- Performance/UnfreezeString:
2164
- Description: 'Use unary plus to get an unfrozen string literal.'
2165
- Enabled: true
2166
- VersionAdded: '0.50'
2167
-
2168
- Performance/UnneededSort:
2169
- Description: >-
2170
- Use `min` instead of `sort.first`,
2171
- `max_by` instead of `sort_by...last`, etc.
2172
- Enabled: true
2173
- VersionAdded: '0.55'
2174
-
2175
- Performance/UriDefaultParser:
2176
- Description: 'Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.'
2177
- Enabled: true
2178
- VersionAdded: '0.50'
2179
-
2180
- #################### Rails #################################
2181
-
2182
- # By default, the rails cops are not run. Override in project or home
2183
- # directory .rubocop.yml files, or by giving the -R/--rails option.
2184
- Rails:
2185
- Enabled: false
2186
-
2187
- Rails/ActionFilter:
2188
- Description: 'Enforces consistent use of action filter methods.'
2189
- Enabled: true
2190
- VersionAdded: '0.19'
2191
- EnforcedStyle: action
2192
- SupportedStyles:
2193
- - action
2194
- - filter
2195
- Include:
2196
- - app/controllers/**/*.rb
2197
-
2198
- Rails/ActiveRecordAliases:
2199
- Description: >-
2200
- Avoid Active Record aliases:
2201
- Use `update` instead of `update_attributes`.
2202
- Use `update!` instead of `update_attributes!`.
2203
- Enabled: true
2204
- VersionAdded: '0.53'
2205
-
2206
- Rails/ActiveSupportAliases:
2207
- Description: >-
2208
- Avoid ActiveSupport aliases of standard ruby methods:
2209
- `String#starts_with?`, `String#ends_with?`,
2210
- `Array#append`, `Array#prepend`.
2211
- Enabled: true
2212
- VersionAdded: '0.48'
2213
-
2214
- Rails/ApplicationJob:
2215
- Description: 'Check that jobs subclass ApplicationJob.'
2216
- Enabled: true
2217
- VersionAdded: '0.49'
2218
-
2219
- Rails/ApplicationRecord:
2220
- Description: 'Check that models subclass ApplicationRecord.'
2221
- Enabled: true
2222
- VersionAdded: '0.49'
2223
-
2224
- Rails/AssertNot:
2225
- Description: 'Use `assert_not` instead of `assert !`.'
2226
- Enabled: true
2227
- VersionAdded: '0.56'
2228
- Include:
2229
- - '**/test/**/*'
2230
-
2231
- Rails/Blank:
2232
- Description: 'Enforces use of `blank?`.'
2233
- Enabled: true
2234
- VersionAdded: '0.48'
2235
- # Convert usages of `nil? || empty?` to `blank?`
2236
- NilOrEmpty: true
2237
- # Convert usages of `!present?` to `blank?`
2238
- NotPresent: true
2239
- # Convert usages of `unless present?` to `if blank?`
2240
- UnlessPresent: true
2241
-
2242
- Rails/BulkChangeTable:
2243
- Description: 'Check whether alter queries are combinable.'
2244
- Enabled: true
2245
- VersionAdded: '0.57'
2246
- Database: null
2247
- SupportedDatabases:
2248
- - mysql
2249
- - postgresql
2250
- Include:
2251
- - db/migrate/*.rb
2252
-
2253
- Rails/CreateTableWithTimestamps:
2254
- Description: >-
2255
- Checks the migration for which timestamps are not included
2256
- when creating a new table.
2257
- Enabled: true
2258
- VersionAdded: '0.52'
2259
- Include:
2260
- - db/migrate/*.rb
2261
-
2262
- Rails/Date:
2263
- Description: >-
2264
- Checks the correct usage of date aware methods,
2265
- such as Date.today, Date.current etc.
2266
- Enabled: true
2267
- VersionAdded: '0.30'
2268
- VersionChanged: '0.33'
2269
- # The value `strict` disallows usage of `Date.today`, `Date.current`,
2270
- # `Date#to_time` etc.
2271
- # The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc
2272
- # (but not `Date.today`) which are overridden by ActiveSupport to handle current
2273
- # time zone.
2274
- EnforcedStyle: flexible
2275
- SupportedStyles:
2276
- - strict
2277
- - flexible
2278
-
2279
- Rails/Delegate:
2280
- Description: 'Prefer delegate method for delegations.'
2281
- Enabled: true
2282
- VersionAdded: '0.21'
2283
- VersionChanged: '0.50'
2284
- # When set to true, using the target object as a prefix of the
2285
- # method name without using the `delegate` method will be a
2286
- # violation. When set to false, this case is legal.
2287
- EnforceForPrefixed: true
2288
-
2289
- Rails/DelegateAllowBlank:
2290
- Description: 'Do not use allow_blank as an option to delegate.'
2291
- Enabled: true
2292
- VersionAdded: '0.44'
2293
-
2294
- Rails/DynamicFindBy:
2295
- Description: 'Use `find_by` instead of dynamic `find_by_*`.'
2296
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by'
2297
- Enabled: true
2298
- VersionAdded: '0.44'
2299
- Whitelist:
2300
- - find_by_sql
2301
-
2302
- Rails/EnumUniqueness:
2303
- Description: 'Avoid duplicate integers in hash-syntax `enum` declaration.'
2304
- Enabled: true
2305
- VersionAdded: '0.46'
2306
- Include:
2307
- - app/models/**/*.rb
2308
-
2309
- Rails/EnvironmentComparison:
2310
- Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`"
2311
- Enabled: true
2312
- VersionAdded: '0.52'
2313
-
2314
- Rails/Exit:
2315
- Description: >-
2316
- Favor `fail`, `break`, `return`, etc. over `exit` in
2317
- application or library code outside of Rake files to avoid
2318
- exits during unit testing or running in production.
2319
- Enabled: true
2320
- VersionAdded: '0.41'
2321
- Include:
2322
- - app/**/*.rb
2323
- - config/**/*.rb
2324
- - lib/**/*.rb
2325
- Exclude:
2326
- - lib/**/*.rake
2327
-
2328
- Rails/FilePath:
2329
- Description: 'Use `Rails.root.join` for file path joining.'
2330
- Enabled: true
2331
- VersionAdded: '0.47'
2332
- VersionChanged: '0.57'
2333
- EnforcedStyle: arguments
2334
- SupportedStyles:
2335
- - slashes
2336
- - arguments
2337
-
2338
- Rails/FindBy:
2339
- Description: 'Prefer find_by over where.first.'
2340
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by'
2341
- Enabled: true
2342
- VersionAdded: '0.30'
2343
- Include:
2344
- - app/models/**/*.rb
2345
-
2346
- Rails/FindEach:
2347
- Description: 'Prefer all.find_each over all.find.'
2348
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find-each'
2349
- Enabled: true
2350
- VersionAdded: '0.30'
2351
- Include:
2352
- - app/models/**/*.rb
2353
-
2354
- Rails/HasAndBelongsToMany:
2355
- Description: 'Prefer has_many :through to has_and_belongs_to_many.'
2356
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has-many-through'
2357
- Enabled: true
2358
- VersionAdded: '0.12'
2359
- Include:
2360
- - app/models/**/*.rb
2361
-
2362
- Rails/HasManyOrHasOneDependent:
2363
- Description: 'Define the dependent option to the has_many and has_one associations.'
2364
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has_many-has_one-dependent-option'
2365
- Enabled: true
2366
- VersionAdded: '0.50'
2367
- Include:
2368
- - app/models/**/*.rb
2369
-
2370
- Rails/HttpPositionalArguments:
2371
- Description: 'Use keyword arguments instead of positional arguments in http method calls.'
2372
- Enabled: true
2373
- VersionAdded: '0.44'
2374
- Include:
2375
- - 'spec/**/*'
2376
- - 'test/**/*'
2377
-
2378
- Rails/HttpStatus:
2379
- Description: 'Enforces use of symbolic or numeric value to define HTTP status.'
2380
- Enabled: true
2381
- VersionAdded: '0.54'
2382
- EnforcedStyle: symbolic
2383
- SupportedStyles:
2384
- - numeric
2385
- - symbolic
2386
-
2387
- Rails/InverseOf:
2388
- Description: 'Checks for associations where the inverse cannot be determined automatically.'
2389
- Enabled: true
2390
- VersionAdded: '0.52'
2391
- Include:
2392
- - app/models/**/*.rb
2393
-
2394
- Rails/LexicallyScopedActionFilter:
2395
- Description: "Checks that methods specified in the filter's `only` or `except` options are explicitly defined in the controller."
2396
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#lexically-scoped-action-filter'
2397
- Enabled: true
2398
- VersionAdded: '0.52'
2399
- Include:
2400
- - app/controllers/**/*.rb
2401
-
2402
- Rails/LinkToBlank:
2403
- Description: 'Checks that `link_to` with a `target: "_blank"` have a `rel: "noopener"` option passed to them.'
2404
- Reference: https://mathiasbynens.github.io/rel-noopener/
2405
- Enabled: true
2406
- VersionAdded: '0.62'
2407
-
2408
- Rails/NotNullColumn:
2409
- Description: 'Do not add a NOT NULL column without a default value'
2410
- Enabled: true
2411
- VersionAdded: '0.43'
2412
- Include:
2413
- - db/migrate/*.rb
2414
-
2415
- Rails/Output:
2416
- Description: 'Checks for calls to puts, print, etc.'
2417
- Enabled: true
2418
- VersionAdded: '0.15'
2419
- VersionChanged: '0.19'
2420
- Include:
2421
- - app/**/*.rb
2422
- - config/**/*.rb
2423
- - db/**/*.rb
2424
- - lib/**/*.rb
2425
-
2426
- Rails/OutputSafety:
2427
- Description: 'The use of `html_safe` or `raw` may be a security risk.'
2428
- Enabled: true
2429
- VersionAdded: '0.41'
2430
-
2431
- Rails/PluralizationGrammar:
2432
- Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.'
2433
- Enabled: true
2434
- VersionAdded: '0.35'
2435
-
2436
- Rails/Presence:
2437
- Description: 'Checks code that can be written more easily using `Object#presence` defined by Active Support.'
2438
- Enabled: true
2439
- VersionAdded: '0.52'
2440
-
2441
- Rails/Present:
2442
- Description: 'Enforces use of `present?`.'
2443
- Enabled: true
2444
- VersionAdded: '0.48'
2445
- # Convert usages of `!nil? && !empty?` to `present?`
2446
- NotNilAndNotEmpty: true
2447
- # Convert usages of `!blank?` to `present?`
2448
- NotBlank: true
2449
- # Convert usages of `unless blank?` to `if present?`
2450
- UnlessBlank: true
2451
-
2452
- Rails/ReadWriteAttribute:
2453
- Description: >-
2454
- Checks for read_attribute(:attr) and
2455
- write_attribute(:attr, val).
2456
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#read-attribute'
2457
- Enabled: true
2458
- VersionAdded: '0.20'
2459
- VersionChanged: '0.29'
2460
- Include:
2461
- - app/models/**/*.rb
2462
-
2463
- Rails/RedundantReceiverInWithOptions:
2464
- Description: 'Checks for redundant receiver in `with_options`.'
2465
- Enabled: true
2466
- VersionAdded: '0.52'
2467
-
2468
- Rails/RefuteMethods:
2469
- Description: 'Use `assert_not` methods instead of `refute` methods.'
2470
- Enabled: true
2471
- VersionAdded: '0.56'
2472
- Include:
2473
- - '**/test/**/*'
2474
-
2475
- Rails/RelativeDateConstant:
2476
- Description: 'Do not assign relative date to constants.'
2477
- Enabled: true
2478
- VersionAdded: '0.48'
2479
- VersionChanged: '0.59'
2480
- AutoCorrect: false
2481
-
2482
- Rails/RequestReferer:
2483
- Description: 'Use consistent syntax for request.referer.'
2484
- Enabled: true
2485
- VersionAdded: '0.41'
2486
- EnforcedStyle: referer
2487
- SupportedStyles:
2488
- - referer
2489
- - referrer
2490
-
2491
- Rails/ReversibleMigration:
2492
- Description: 'Checks whether the change method of the migration file is reversible.'
2493
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#reversible-migration'
2494
- Reference: 'https://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html'
2495
- Enabled: true
2496
- VersionAdded: '0.47'
2497
- Include:
2498
- - db/migrate/*.rb
2499
-
2500
- Rails/SafeNavigation:
2501
- Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`"
2502
- Enabled: true
2503
- VersionAdded: '0.43'
2504
- # This will convert usages of `try` to use safe navigation as well as `try!`.
2505
- # `try` and `try!` work slightly differently. `try!` and safe navigation will
2506
- # both raise a `NoMethodError` if the receiver of the method call does not
2507
- # implement the intended method. `try` will not raise an exception for this.
2508
- ConvertTry: false
2509
-
2510
- Rails/SaveBang:
2511
- Description: 'Identifies possible cases where Active Record save! or related should be used.'
2512
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#save-bang'
2513
- Enabled: false
2514
- VersionAdded: '0.42'
2515
- VersionChanged: '0.59'
2516
- AllowImplicitReturn: true
2517
- AllowedReceivers: []
2518
-
2519
- Rails/ScopeArgs:
2520
- Description: 'Checks the arguments of ActiveRecord scopes.'
2521
- Enabled: true
2522
- VersionAdded: '0.19'
2523
- Include:
2524
- - app/models/**/*.rb
2525
-
2526
- Rails/SkipsModelValidations:
2527
- Description: >-
2528
- Use methods that skips model validations with caution.
2529
- See reference for more information.
2530
- Reference: 'https://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
2531
- Enabled: true
2532
- VersionAdded: '0.47'
2533
- VersionChanged: '0.60'
2534
- Blacklist:
2535
- - decrement!
2536
- - decrement_counter
2537
- - increment!
2538
- - increment_counter
2539
- - toggle!
2540
- - touch
2541
- - update_all
2542
- - update_attribute
2543
- - update_column
2544
- - update_columns
2545
- - update_counters
2546
- Whitelist: []
2547
-
2548
- Rails/TimeZone:
2549
- Description: 'Checks the correct usage of time zone aware methods.'
2550
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#time'
2551
- Reference: 'http://danilenko.org/2012/7/6/rails_timezones'
2552
- Enabled: true
2553
- VersionAdded: '0.30'
2554
- VersionChanged: '0.33'
2555
- # The value `strict` means that `Time` should be used with `zone`.
2556
- # The value `flexible` allows usage of `in_time_zone` instead of `zone`.
2557
- EnforcedStyle: flexible
2558
- SupportedStyles:
2559
- - strict
2560
- - flexible
2561
-
2562
- Rails/UniqBeforePluck:
2563
- Description: 'Prefer the use of uniq or distinct before pluck.'
2564
- Enabled: true
2565
- VersionAdded: '0.40'
2566
- VersionChanged: '0.47'
2567
- EnforcedStyle: conservative
2568
- SupportedStyles:
2569
- - conservative
2570
- - aggressive
2571
- AutoCorrect: false
2572
-
2573
- Rails/UnknownEnv:
2574
- Description: 'Use correct environment name.'
2575
- Enabled: true
2576
- VersionAdded: '0.51'
2577
- Environments:
2578
- - development
2579
- - test
2580
- - production
2581
-
2582
- Rails/Validation:
2583
- Description: 'Use validates :attribute, hash of validations.'
2584
- Enabled: true
2585
- VersionAdded: '0.9'
2586
- VersionChanged: '0.41'
2587
- Include:
2588
- - app/models/**/*.rb
2589
-
2590
2082
  #################### Security ##############################
2591
2083
 
2592
2084
  Security/Eval:
@@ -2643,7 +2135,7 @@ Style/AccessModifierDeclarations:
2643
2135
 
2644
2136
  Style/Alias:
2645
2137
  Description: 'Use alias instead of alias_method.'
2646
- StyleGuide: '#alias-method'
2138
+ StyleGuide: '#alias-method-lexically'
2647
2139
  Enabled: true
2648
2140
  VersionAdded: '0.9'
2649
2141
  VersionChanged: '0.36'
@@ -2731,8 +2223,9 @@ Style/BlockDelimiters:
2731
2223
  - line_count_based
2732
2224
  # The `semantic` style enforces braces around functional blocks, where the
2733
2225
  # primary purpose of the block is to return a value and do..end for
2734
- # procedural blocks, where the primary purpose of the block is its
2735
- # side-effects.
2226
+ # multi-line procedural blocks, where the primary purpose of the block is
2227
+ # its side-effects. Single-line procedural blocks may only use do-end,
2228
+ # unless AllowBracesOnProceduralOneLiners has a truthy value (see below).
2736
2229
  #
2737
2230
  # This looks at the usage of a block's method to determine its type (e.g. is
2738
2231
  # the result of a `map` assigned to a variable or passed to another
@@ -2744,6 +2237,8 @@ Style/BlockDelimiters:
2744
2237
  # return value is being chained with another method (in which case braces
2745
2238
  # are enforced).
2746
2239
  - braces_for_chaining
2240
+ # The `always_braces` style always enforces braces.
2241
+ - always_braces
2747
2242
  ProceduralMethods:
2748
2243
  # Methods that are known to be procedural in nature but look functional from
2749
2244
  # their usage, e.g.
@@ -2793,6 +2288,28 @@ Style/BlockDelimiters:
2793
2288
  - lambda
2794
2289
  - proc
2795
2290
  - it
2291
+ # The AllowBracesOnProceduralOneLiners option is ignored unless the
2292
+ # EnforcedStyle is set to `semantic`. If so:
2293
+ #
2294
+ # If AllowBracesOnProceduralOneLiners is unspecified, or set to any
2295
+ # falsey value, then semantic purity is maintained, so one-line
2296
+ # procedural blocks must use do-end, not braces.
2297
+ #
2298
+ # # bad
2299
+ # collection.each { |element| puts element }
2300
+ #
2301
+ # # good
2302
+ # collection.each do |element| puts element end
2303
+ #
2304
+ # If AllowBracesOnProceduralOneLiners is set to any truthy value,
2305
+ # then one-line procedural blocks may use either style.
2306
+ #
2307
+ # # good
2308
+ # collection.each { |element| puts element }
2309
+ #
2310
+ # # also good
2311
+ # collection.each do |element| puts element end
2312
+ AllowBracesOnProceduralOneLiners: false
2796
2313
 
2797
2314
  Style/BracesAroundHashParameters:
2798
2315
  Description: 'Enforce braces style around hash parameters.'
@@ -2969,6 +2486,13 @@ Style/ConditionalAssignment:
2969
2486
  SingleLineConditionsOnly: true
2970
2487
  IncludeTernaryExpressions: true
2971
2488
 
2489
+ Style/ConstantVisibility:
2490
+ Description: >-
2491
+ Check that class- and module constants have
2492
+ visibility declarations.
2493
+ Enabled: false
2494
+ VersionAdded: '0.66'
2495
+
2972
2496
  # Checks that you have put a copyright in a comment before any code.
2973
2497
  #
2974
2498
  # You can override the default Notice in your .rubocop.yml file.
@@ -3117,7 +2641,7 @@ Style/EvalWithLocation:
3117
2641
  VersionAdded: '0.52'
3118
2642
 
3119
2643
  Style/EvenOdd:
3120
- Description: 'Favor the use of Integer#even? && Integer#odd?'
2644
+ Description: 'Favor the use of `Integer#even?` && `Integer#odd?`.'
3121
2645
  StyleGuide: '#predicate-methods'
3122
2646
  Enabled: true
3123
2647
  VersionAdded: '0.12'
@@ -3128,11 +2652,18 @@ Style/ExpandPathArguments:
3128
2652
  Enabled: true
3129
2653
  VersionAdded: '0.53'
3130
2654
 
3131
- Style/FlipFlop:
3132
- Description: 'Checks for flip flops'
3133
- StyleGuide: '#no-flip-flops'
2655
+ Style/FloatDivision:
2656
+ Description: 'For performing float division, coerce one side only.'
2657
+ StyleGuide: '#float-division'
2658
+ Reference: 'https://github.com/rubocop-hq/ruby-style-guide/issues/628'
3134
2659
  Enabled: true
3135
- VersionAdded: '0.16'
2660
+ VersionAdded: '0.72'
2661
+ EnforcedStyle: single_coerce
2662
+ SupportedStyles:
2663
+ - left_coerce
2664
+ - right_coerce
2665
+ - single_coerce
2666
+ - fdiv
3136
2667
 
3137
2668
  Style/For:
3138
2669
  Description: 'Checks use of for or each in multiline loops.'
@@ -3174,15 +2705,12 @@ Style/FormatStringToken:
3174
2705
  Style/FrozenStringLiteralComment:
3175
2706
  Description: >-
3176
2707
  Add the frozen_string_literal comment to the top of files
3177
- to help transition from Ruby 2.3.0 to Ruby 3.0.
2708
+ to help transition to frozen string literals by default.
3178
2709
  Enabled: true
3179
2710
  VersionAdded: '0.36'
3180
- VersionChanged: '0.47'
3181
- EnforcedStyle: when_needed
2711
+ VersionChanged: '0.69'
2712
+ EnforcedStyle: always
3182
2713
  SupportedStyles:
3183
- # `when_needed` will add the frozen string literal comment to files
3184
- # only when the `TargetRubyVersion` is set to 2.3+.
3185
- - when_needed
3186
2714
  # `always` will always add the frozen string literal comment to a file
3187
2715
  # regardless of the Ruby version or if `freeze` or `<<` are called on a
3188
2716
  # string literal. If you run code against multiple versions of Ruby, it is
@@ -3202,7 +2730,7 @@ Style/GlobalVars:
3202
2730
  AllowedVariables: []
3203
2731
 
3204
2732
  Style/GuardClause:
3205
- Description: 'Check for conditionals that can be replaced with guard clauses'
2733
+ Description: 'Check for conditionals that can be replaced with guard clauses.'
3206
2734
  StyleGuide: '#no-nested-conditionals'
3207
2735
  Enabled: true
3208
2736
  VersionAdded: '0.20'
@@ -3245,6 +2773,7 @@ Style/IdenticalConditionalBranches:
3245
2773
  Style/IfInsideElse:
3246
2774
  Description: 'Finds if nodes inside else, which can be converted to elsif.'
3247
2775
  Enabled: true
2776
+ AllowIfModifier: false
3248
2777
  VersionAdded: '0.36'
3249
2778
 
3250
2779
  Style/IfUnlessModifier:
@@ -3352,7 +2881,9 @@ Style/LineEndConcatenation:
3352
2881
  Use \ instead of + or << to concatenate two string literals at
3353
2882
  line end.
3354
2883
  Enabled: true
2884
+ SafeAutoCorrect: false
3355
2885
  VersionAdded: '0.18'
2886
+ VersionChanged: '0.64'
3356
2887
 
3357
2888
  Style/MethodCallWithArgsParentheses:
3358
2889
  Description: 'Use parentheses for method calls with arguments.'
@@ -3362,8 +2893,10 @@ Style/MethodCallWithArgsParentheses:
3362
2893
  VersionChanged: '0.61'
3363
2894
  IgnoreMacros: true
3364
2895
  IgnoredMethods: []
2896
+ IncludedMacros: []
3365
2897
  AllowParenthesesInMultilineCall: false
3366
2898
  AllowParenthesesInChaining: false
2899
+ AllowParenthesesInCamelCaseMethod: false
3367
2900
  EnforcedStyle: require_parentheses
3368
2901
  SupportedStyles:
3369
2902
  - require_parentheses
@@ -3406,7 +2939,7 @@ Style/MethodMissingSuper:
3406
2939
  Style/MinMax:
3407
2940
  Description: >-
3408
2941
  Use `Enumerable#minmax` instead of `Enumerable#min`
3409
- and `Enumerable#max` in conjunction.'
2942
+ and `Enumerable#max` in conjunction.
3410
2943
  Enabled: true
3411
2944
  VersionAdded: '0.50'
3412
2945
 
@@ -3416,7 +2949,7 @@ Style/MissingElse:
3416
2949
  If enabled, it is recommended that
3417
2950
  Style/UnlessElse and Style/EmptyElse be enabled.
3418
2951
  This will conflict with Style/EmptyElse if
3419
- Style/EmptyElse is configured to style "both"
2952
+ Style/EmptyElse is configured to style "both".
3420
2953
  Enabled: false
3421
2954
  VersionAdded: '0.30'
3422
2955
  VersionChanged: '0.38'
@@ -3460,11 +2993,13 @@ Style/ModuleFunction:
3460
2993
  StyleGuide: '#module-function'
3461
2994
  Enabled: true
3462
2995
  VersionAdded: '0.11'
3463
- VersionChanged: '0.53'
2996
+ VersionChanged: '0.65'
3464
2997
  EnforcedStyle: module_function
3465
2998
  SupportedStyles:
3466
2999
  - module_function
3467
3000
  - extend_self
3001
+ Autocorrect: false
3002
+ SafeAutoCorrect: false
3468
3003
 
3469
3004
  Style/MultilineBlockChain:
3470
3005
  Description: 'Avoid multi-line chains of blocks.'
@@ -3519,6 +3054,17 @@ Style/MutableConstant:
3519
3054
  Description: 'Do not assign mutable objects to constants.'
3520
3055
  Enabled: true
3521
3056
  VersionAdded: '0.34'
3057
+ VersionChanged: '0.65'
3058
+ EnforcedStyle: literals
3059
+ SupportedStyles:
3060
+ # literals: freeze literals assigned to constants
3061
+ # strict: freeze all constants
3062
+ # Strict mode is considered an experimental feature. It has not been updated
3063
+ # with an exhaustive list of all methods that will produce frozen objects so
3064
+ # there is a decent chance of getting some false positives. Luckily, there is
3065
+ # no harm in freezing an already frozen object.
3066
+ - literals
3067
+ - strict
3522
3068
 
3523
3069
  Style/NegatedIf:
3524
3070
  Description: >-
@@ -3537,6 +3083,20 @@ Style/NegatedIf:
3537
3083
  - prefix
3538
3084
  - postfix
3539
3085
 
3086
+ Style/NegatedUnless:
3087
+ Description: 'Favor if over unless for negative conditions.'
3088
+ StyleGuide: '#if-for-negatives'
3089
+ Enabled: true
3090
+ VersionAdded: '0.69'
3091
+ EnforcedStyle: both
3092
+ SupportedStyles:
3093
+ # both: prefix and postfix negated `unless` should both use `if`
3094
+ # prefix: only use `if` for negated `unless` statements positioned before the body of the statement
3095
+ # postfix: only use `if` for negated `unless` statements positioned after the body of the statement
3096
+ - both
3097
+ - prefix
3098
+ - postfix
3099
+
3540
3100
  Style/NegatedWhile:
3541
3101
  Description: 'Favor until over while for negative conditions.'
3542
3102
  StyleGuide: '#until-for-negatives'
@@ -3701,7 +3261,7 @@ Style/OptionHash:
3701
3261
  Style/OptionalArguments:
3702
3262
  Description: >-
3703
3263
  Checks for optional arguments that do not appear at the end
3704
- of the argument list
3264
+ of the argument list.
3705
3265
  StyleGuide: '#optional-arguments'
3706
3266
  Enabled: true
3707
3267
  VersionAdded: '0.33'
@@ -3733,7 +3293,7 @@ Style/ParenthesesAroundCondition:
3733
3293
  AllowInMultilineConditions: false
3734
3294
 
3735
3295
  Style/PercentLiteralDelimiters:
3736
- Description: 'Use `%`-literal delimiters consistently'
3296
+ Description: 'Use `%`-literal delimiters consistently.'
3737
3297
  StyleGuide: '#percent-literal-braces'
3738
3298
  Enabled: true
3739
3299
  VersionAdded: '0.19'
@@ -3768,8 +3328,9 @@ Style/PreferredHashMethods:
3768
3328
  Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
3769
3329
  StyleGuide: '#hash-key'
3770
3330
  Enabled: true
3331
+ Safe: false
3771
3332
  VersionAdded: '0.41'
3772
- VersionChanged: '0.44'
3333
+ VersionChanged: '0.70'
3773
3334
  EnforcedStyle: short
3774
3335
  SupportedStyles:
3775
3336
  - short
@@ -3824,6 +3385,7 @@ Style/RedundantFreeze:
3824
3385
  Description: "Checks usages of Object#freeze on immutable objects."
3825
3386
  Enabled: true
3826
3387
  VersionAdded: '0.34'
3388
+ VersionChanged: '0.66'
3827
3389
 
3828
3390
  Style/RedundantParentheses:
3829
3391
  Description: "Checks for parentheses that seem not to serve any purpose."
@@ -3846,6 +3408,11 @@ Style/RedundantSelf:
3846
3408
  VersionAdded: '0.10'
3847
3409
  VersionChanged: '0.13'
3848
3410
 
3411
+ Style/RedundantSortBy:
3412
+ Description: 'Use `sort` instead of `sort_by { |x| x }`.'
3413
+ Enabled: true
3414
+ VersionAdded: '0.36'
3415
+
3849
3416
  Style/RegexpLiteral:
3850
3417
  Description: 'Use / or %r around regular expressions.'
3851
3418
  StyleGuide: '#percent-r'
@@ -3898,7 +3465,7 @@ Style/SafeNavigation:
3898
3465
  safe navigation (`&.`).
3899
3466
  Enabled: true
3900
3467
  VersionAdded: '0.43'
3901
- VersionChanged: '0.44'
3468
+ VersionChanged: '0.56'
3902
3469
  # Safe navigation may cause a statement to start returning `nil` in addition
3903
3470
  # to whatever it used to return.
3904
3471
  ConvertCodeThatCanStartToReturnNil: false
@@ -3908,7 +3475,14 @@ Style/SafeNavigation:
3908
3475
  - presence
3909
3476
  - try
3910
3477
  - try!
3911
- VersionChanged: '0.56'
3478
+
3479
+ Style/Sample:
3480
+ Description: >-
3481
+ Use `sample` instead of `shuffle.first`,
3482
+ `shuffle.last`, and `shuffle[Integer]`.
3483
+ Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
3484
+ Enabled: true
3485
+ VersionAdded: '0.30'
3912
3486
 
3913
3487
  Style/SelfAssignment:
3914
3488
  Description: >-
@@ -4040,6 +3614,11 @@ Style/StringMethods:
4040
3614
  PreferredMethods:
4041
3615
  intern: to_sym
4042
3616
 
3617
+ Style/Strip:
3618
+ Description: 'Use `strip` instead of `lstrip.rstrip`.'
3619
+ Enabled: true
3620
+ VersionAdded: '0.36'
3621
+
4043
3622
  Style/StructInheritance:
4044
3623
  Description: 'Checks for inheritance from Struct.new.'
4045
3624
  StyleGuide: '#no-extend-struct-new'
@@ -4066,8 +3645,9 @@ Style/SymbolLiteral:
4066
3645
  Style/SymbolProc:
4067
3646
  Description: 'Use symbols as procs instead of blocks when possible.'
4068
3647
  Enabled: true
3648
+ SafeAutoCorrect: false
4069
3649
  VersionAdded: '0.26'
4070
- VersionChanged: '0.40'
3650
+ VersionChanged: '0.64'
4071
3651
  # A list of method names to be ignored by the check.
4072
3652
  # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
4073
3653
  IgnoredMethods:
@@ -4235,10 +3815,17 @@ Style/UnneededPercentQ:
4235
3815
  Enabled: true
4236
3816
  VersionAdded: '0.24'
4237
3817
 
3818
+ Style/UnneededSort:
3819
+ Description: >-
3820
+ Use `min` instead of `sort.first`,
3821
+ `max_by` instead of `sort_by...last`, etc.
3822
+ Enabled: true
3823
+ VersionAdded: '0.55'
3824
+
4238
3825
  Style/UnpackFirst:
4239
3826
  Description: >-
4240
3827
  Checks for accessing the first element of `String#unpack`
4241
- instead of using `unpack1`
3828
+ instead of using `unpack1`.
4242
3829
  Enabled: true
4243
3830
  VersionAdded: '0.54'
4244
3831
 
@@ -4289,20 +3876,24 @@ Style/WordArray:
4289
3876
  # whose element count is greater than or equal to `MinSize`.
4290
3877
  MinSize: 2
4291
3878
  # The regular expression `WordRegex` decides what is considered a word.
4292
- WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/'
3879
+ WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/'
4293
3880
 
4294
3881
  Style/YodaCondition:
4295
- Description: 'Do not use literals as the first operand of a comparison.'
3882
+ Description: 'Forbid or enforce yoda conditions.'
4296
3883
  Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'
4297
3884
  Enabled: true
4298
- EnforcedStyle: all_comparison_operators
3885
+ EnforcedStyle: forbid_for_all_comparison_operators
4299
3886
  SupportedStyles:
4300
3887
  # check all comparison operators
4301
- - all_comparison_operators
3888
+ - forbid_for_all_comparison_operators
4302
3889
  # check only equality operators: `!=` and `==`
4303
- - equality_operators_only
3890
+ - forbid_for_equality_operators_only
3891
+ # enforce yoda for all comparison operators
3892
+ - require_for_all_comparison_operators
3893
+ # enforce yoda only for equality operators: `!=` and `==`
3894
+ - require_for_equality_operators_only
4304
3895
  VersionAdded: '0.49'
4305
- VersionChanged: '0.50'
3896
+ VersionChanged: '0.63'
4306
3897
 
4307
3898
  Style/ZeroLengthPredicate:
4308
3899
  Description: 'Use #empty? when testing for objects of length 0.'