makandra-rubocop 3.2.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c34aa19268e15ce4859a9f5558fa2c1739d6e877bdc1adb9ec0bae28c917192e
4
- data.tar.gz: 3628d507608fd8d312c9f62e6bae9a67492aa3fe68b5a886cdc29fff1c2fed9a
3
+ metadata.gz: c748c28b6295e75d04c1254c1c1181fca72fdf9daee553d0386635c70fc36c3f
4
+ data.tar.gz: 8ca3a1e46f1c26fb51e6685e71bcbda08f84c80c42a8764502ff24a3e5948060
5
5
  SHA512:
6
- metadata.gz: 42a56e45b75fda55306d62b38c81a0c066f8d7f668ec928c215c6f69c28623af00e5cfccc38be5b00ff5a235e9625411edbbbc1b4723b3db29070ce5c9f3d2aa
7
- data.tar.gz: f809d14789322ea3ce131fb0ed7f72c590b553076088326a11e713c2d1df97acd498850bc95d61d57ba8c6d353e1f4e0f98a50e23add33128efac2617ae5baec
6
+ metadata.gz: 886ac6d00bd7db5eeebbabebf5c9a9da369d4b4ca6781d0ece5fd48d98e0c82094ec96295c1f1590955afb2942f288c96de7bb8cd6e200006facfcad412f31c2
7
+ data.tar.gz: 41758cfc49b67543b80bd19a9a6452a2b4468a897571f9d0209bf3dab73da8d601817ce530a2e9cfe0b3770f7505a684f315a7495edfb2c5de5dc42f92e7c5c1
data/CHANGELOG.md CHANGED
@@ -2,16 +2,52 @@ All notable changes to this project will be documented in this file.
2
2
 
3
3
  This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
4
4
 
5
-
6
5
  ## Unreleased
7
6
 
8
7
  ### Breaking changes
9
8
 
10
- -
11
-
12
9
  ### Compatible changes
13
10
 
14
- -
11
+
12
+ ## 4.0.0 - 2019-12-06
13
+
14
+ ### Breaking changes
15
+
16
+ - Upgrade to Rubocop 0.76.0
17
+ - Drop support for Ruby < 2.3.0
18
+
19
+ Rubopcop 0.72.0 extracts all its Rails helpers to a new gem. This results in two split config files in the
20
+ `makandra-rubocop` gem:
21
+
22
+ * config/default.yml (contains now only Ruby cops)
23
+ * config/ext/rails.yml (contains all Rails cops)
24
+
25
+ Enabling the Rails cops was and is optional in `makandra-rubocop`. In case you want to use the Ruby cops only, please
26
+ use the following config as before:
27
+
28
+ ```
29
+ inherit_gem:
30
+ makandra-rubocop:
31
+ - config/default.yml
32
+ ```
33
+
34
+ In case you want to use the Ruby and the Rails cops:
35
+
36
+ 1\. Remove the following config (if present) from your `.rubocop.yml`:
37
+
38
+ ```
39
+ Rails:
40
+ Enabled: true
41
+ ```
42
+
43
+ 2\. Change the beginning of your `.rubocop.yml`:
44
+
45
+ ```
46
+ inherit_gem:
47
+ makandra-rubocop:
48
+ - config/default.yml
49
+ - config/ext/rails.yml
50
+ ```
15
51
 
16
52
 
17
53
  ## 3.2.1 - 2019-11-14
@@ -22,10 +58,6 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
22
58
 
23
59
  ## 3.2.0 - 2019-07-29
24
60
 
25
- ### Breaking changes
26
-
27
- -
28
-
29
61
  ### Compatible changes
30
62
 
31
63
  - Exclude files in `tmp` and `public/system`.
data/Gemfile.lock CHANGED
@@ -1,32 +1,33 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- makandra-rubocop (3.2.0)
5
- rubocop (~> 0.65.0)
4
+ makandra-rubocop (4.0.0)
5
+ rubocop (~> 0.76.0)
6
+ rubocop-rails (~> 2.3.2)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
11
  ast (2.4.0)
11
12
  jaro_winkler (1.5.4)
12
- parallel (1.19.0)
13
+ parallel (1.19.1)
13
14
  parser (2.6.5.0)
14
15
  ast (~> 2.4.0)
15
- powerpack (0.1.2)
16
- psych (3.1.0)
16
+ rack (2.0.7)
17
17
  rainbow (3.0.0)
18
18
  rake (12.3.2)
19
- rubocop (0.65.0)
19
+ rubocop (0.76.0)
20
20
  jaro_winkler (~> 1.5.1)
21
21
  parallel (~> 1.10)
22
- parser (>= 2.5, != 2.5.1.1)
23
- powerpack (~> 0.1)
24
- psych (>= 3.1.0)
22
+ parser (>= 2.6)
25
23
  rainbow (>= 2.2.2, < 4.0)
26
24
  ruby-progressbar (~> 1.7)
27
- unicode-display_width (~> 1.4.0)
25
+ unicode-display_width (>= 1.4.0, < 1.7)
26
+ rubocop-rails (2.3.2)
27
+ rack (>= 1.1)
28
+ rubocop (>= 0.72.0)
28
29
  ruby-progressbar (1.10.1)
29
- unicode-display_width (1.4.1)
30
+ unicode-display_width (1.6.0)
30
31
 
31
32
  PLATFORMS
32
33
  ruby
data/README.md CHANGED
@@ -21,20 +21,46 @@ Or install it yourself as:
21
21
 
22
22
  ## Usage
23
23
 
24
- Add `.rubocop.yml` to your project with the following contents:
24
+ Add a `.rubocop.yml` to your project with the following contents:
25
+
26
+ **For Ruby**
25
27
 
26
28
  ```yaml
27
29
  inherit_gem:
28
30
  makandra-rubocop: config/default.yml
29
31
  ```
30
32
 
31
- Any per-project rules can then be defined in `.rubocop.yml`.
33
+ **For Rails**
34
+
35
+ ```yaml
36
+ inherit_gem:
37
+ makandra-rubocop:
38
+ - config/default.yml
39
+ - config/ext/rails.yml
40
+ ```
41
+
42
+ Any per-project rules can then be defined in `.rubocop.yml`:
43
+
44
+ ```
45
+ inherit_gem:
46
+ makandra-rubocop:
47
+ - config/default.yml
48
+ - config/ext/rails.yml
49
+
50
+ AllCops:
51
+ Exclude:
52
+ - 'lib/assets/**/*'
53
+
54
+ Layout/MultilineArrayLineBreaks:
55
+ Enabled: true
56
+ ```
32
57
 
33
58
  ### Executing Rubocop on demand
34
59
 
35
60
  Run Rubocop via `bundle exec rubocop` from your project directory.
36
61
 
37
62
  For an initial run it might also useful to use the auto-correct option (`bundle exec rubocop --auto-correct`) and carefully check in all changes.
63
+ You can follow [this guide](https://makandracards.com/makandra/400093-adding-makandra-rubocop-to-an-existing-code-base) for bigger projects.
38
64
 
39
65
  ### Integrating Rubocop into your test suite
40
66
 
data/config/default.yml CHANGED
@@ -77,7 +77,7 @@ AllCops:
77
77
  DisplayStyleGuide: false
78
78
  # When specifying style guide URLs, any paths and/or fragments will be
79
79
  # evaluated relative to the base URL.
80
- StyleGuideBaseURL: https://github.com/rubocop-hq/ruby-style-guide
80
+ StyleGuideBaseURL: https://rubystyle.guide
81
81
  # Extra details are not displayed in offense messages by default. Change
82
82
  # behavior by overriding ExtraDetails, or by giving the
83
83
  # `-E/--extra-details` option.
@@ -127,16 +127,8 @@ AllCops:
127
127
  # followed by the Gemfile.lock or gems.locked file. (Although the Ruby version
128
128
  # is specified in the Gemfile or gems.rb file, RuboCop reads the final value
129
129
  # from the lock file.) If the Ruby version is still unresolved, RuboCop will
130
- # use the oldest officially supported Ruby version (currently Ruby 2.2).
130
+ # use the oldest officially supported Ruby version (currently Ruby 2.3).
131
131
  TargetRubyVersion: ~
132
- # What version of Rails is the inspected code using? If a value is specified
133
- # for TargetRailsVersion then it is used. Acceptable values are specificed
134
- # as a float (i.e. 5.1); the patch version of Rails should not be included.
135
- # If TargetRailsVersion is not set, RuboCop will parse the Gemfile.lock or
136
- # gems.locked file to find the version of Rails that has been bound to the
137
- # application. If neither of those files exist, RuboCop will use Rails 5.0
138
- # as the default.
139
- TargetRailsVersion: ~
140
132
 
141
133
  #################### Bundler ###############################
142
134
 
@@ -207,6 +199,13 @@ Gemspec/RequiredRubyVersion:
207
199
  VersionAdded: '0.52'
208
200
  Include:
209
201
  - '**/*.gemspec'
202
+ -
203
+ Gemspec/RubyVersionGlobalsUsage:
204
+ Description: Checks usage of RUBY_VERSION in gemspec.
205
+ Enabled: false
206
+ VersionAdded: '0.72'
207
+ Include:
208
+ - '**/*.gemspec'
210
209
 
211
210
  #################### Layout ###########################
212
211
 
@@ -223,6 +222,34 @@ Layout/AccessModifierIndentation:
223
222
  # But it can be overridden by setting this parameter
224
223
  IndentationWidth: ~
225
224
 
225
+ Layout/AlignArguments:
226
+ Description: >-
227
+ Align the arguments of a method call if they span more
228
+ than one line.
229
+ StyleGuide: '#no-double-indent'
230
+ Enabled: false
231
+ VersionAdded: '0.68'
232
+ # Alignment of arguments in multi-line method calls.
233
+ #
234
+ # The `with_first_argument` style aligns the following lines along the same
235
+ # column as the first parameter.
236
+ #
237
+ # method_call(a,
238
+ # b)
239
+ #
240
+ # The `with_fixed_indentation` style aligns the following lines with one
241
+ # level of indentation relative to the start of the line with the method call.
242
+ #
243
+ # method_call(a,
244
+ # b)
245
+ EnforcedStyle: with_first_argument
246
+ SupportedStyles:
247
+ - with_first_argument
248
+ - with_fixed_indentation
249
+ # By default, the indentation width from Layout/IndentationWidth is used
250
+ # But it can be overridden by setting this parameter
251
+ IndentationWidth: ~
252
+
226
253
  Layout/AlignArray:
227
254
  Description: >-
228
255
  Align the elements of an array literal if they span more than
@@ -236,6 +263,7 @@ Layout/AlignHash:
236
263
  Align the elements of a hash literal if they span more than
237
264
  one line.
238
265
  Enabled: false
266
+ AllowMultipleStyles: true
239
267
  VersionAdded: '0.49'
240
268
  # Alignment of entries using hash rocket as separator. Valid values are:
241
269
  #
@@ -309,23 +337,24 @@ Layout/AlignHash:
309
337
 
310
338
  Layout/AlignParameters:
311
339
  Description: >-
312
- Align the parameters of a method call if they span more
340
+ Align the parameters of a method definition if they span more
313
341
  than one line.
314
342
  StyleGuide: '#no-double-indent'
315
343
  Enabled: false
316
344
  VersionAdded: '0.49'
345
+ VersionChanged: '0.68'
317
346
  # Alignment of parameters in multi-line method calls.
318
347
  #
319
348
  # The `with_first_parameter` style aligns the following lines along the same
320
349
  # column as the first parameter.
321
350
  #
322
- # method_call(a,
323
- # b)
351
+ # def method_foo(a,
352
+ # b)
324
353
  #
325
354
  # The `with_fixed_indentation` style aligns the following lines with one
326
355
  # level of indentation relative to the start of the line with the method call.
327
356
  #
328
- # method_call(a,
357
+ # def method_foo(a,
329
358
  # b)
330
359
  EnforcedStyle: with_first_parameter
331
360
  SupportedStyles:
@@ -372,7 +401,7 @@ Layout/CaseIndentation:
372
401
 
373
402
  Layout/ClassStructure:
374
403
  Description: 'Enforces a configured order of definitions within a class body.'
375
- StyleGuide: 'https://github.com/rubocop-hq/ruby-style-guide#consistent-classes'
404
+ StyleGuide: '#consistent-classes'
376
405
  Enabled: false
377
406
  VersionAdded: '0.52'
378
407
  Categories:
@@ -483,6 +512,13 @@ Layout/EmptyLinesAroundAccessModifier:
483
512
  StyleGuide: '#empty-lines-around-access-modifier'
484
513
  Enabled: false
485
514
  VersionAdded: '0.49'
515
+ EnforcedStyle: around
516
+ SupportedStyles:
517
+ - around
518
+ - only_before
519
+ Reference:
520
+ # A reference to `EnforcedStyle: only_before`.
521
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
486
522
 
487
523
  Layout/EmptyLinesAroundArguments:
488
524
  Description: "Keeps track of empty lines around method arguments."
@@ -585,6 +621,10 @@ Layout/ExtraSpacing:
585
621
  # things with the previous or next line, not counting empty lines or comment
586
622
  # lines.
587
623
  AllowForAlignment: true
624
+ # When true, allows things like 'obj.meth(arg) # comment',
625
+ # rather than insisting on 'obj.meth(arg) # comment'.
626
+ # If done for alignment, either this OR AllowForAlignment will allow it.
627
+ AllowBeforeTrailingComments: false
588
628
  # When true, forces the alignment of `=` in assignments on consecutive lines.
589
629
  ForceEqualSignAlignment: false
590
630
 
@@ -616,11 +656,28 @@ Layout/FirstMethodParameterLineBreak:
616
656
  Enabled: false
617
657
  VersionAdded: '0.49'
618
658
 
619
- Layout/FirstParameterIndentation:
620
- Description: 'Checks the indentation of the first parameter in a method call.'
621
- Enabled: true
659
+ Layout/HeredocArgumentClosingParenthesis:
660
+ Description: >-
661
+ Checks for the placement of the closing parenthesis in a
662
+ method call that passes a HEREDOC string as an argument.
663
+ Enabled: false
664
+ StyleGuide: '#heredoc-argument-closing-parentheses'
665
+ VersionAdded: '0.68'
666
+
667
+ Layout/IndentAssignment:
668
+ Description: >-
669
+ Checks the indentation of the first line of the
670
+ right-hand-side of a multi-line assignment.
671
+ Enabled: false # We do not want to write the assignment in the following line
622
672
  VersionAdded: '0.49'
623
- VersionChanged: '0.56'
673
+ # By default, the indentation width from `Layout/IndentationWidth` is used
674
+ # But it can be overridden by setting this parameter
675
+ IndentationWidth: ~
676
+
677
+ Layout/IndentFirstArgument:
678
+ Description: 'Checks the indentation of the first argument in a method call.'
679
+ Enabled: true
680
+ VersionAdded: '0.68'
624
681
  EnforcedStyle: special_for_inner_method_call_in_parentheses
625
682
  SupportedStyles:
626
683
  # The first parameter should always be indented one step more than the
@@ -641,12 +698,12 @@ Layout/FirstParameterIndentation:
641
698
  # But it can be overridden by setting this parameter
642
699
  IndentationWidth: ~
643
700
 
644
- Layout/IndentArray:
701
+ Layout/IndentFirstArrayElement:
645
702
  Description: >-
646
703
  Checks the indentation of the first element in an array
647
704
  literal.
648
705
  Enabled: true
649
- VersionAdded: '0.49'
706
+ VersionAdded: '0.68'
650
707
  # The value `special_inside_parentheses` means that array literals with
651
708
  # brackets that have their opening bracket on the same line as a surrounding
652
709
  # opening round parenthesis, shall have their first element indented relative
@@ -667,20 +724,10 @@ Layout/IndentArray:
667
724
  # But it can be overridden by setting this parameter
668
725
  IndentationWidth: ~
669
726
 
670
- Layout/IndentAssignment:
671
- Description: >-
672
- Checks the indentation of the first line of the
673
- right-hand-side of a multi-line assignment.
674
- Enabled: true
675
- VersionAdded: '0.49'
676
- # By default, the indentation width from `Layout/IndentationWidth` is used
677
- # But it can be overridden by setting this parameter
678
- IndentationWidth: ~
679
-
680
- Layout/IndentHash:
727
+ Layout/IndentFirstHashElement:
681
728
  Description: 'Checks the indentation of the first key in a hash literal.'
682
729
  Enabled: true
683
- VersionAdded: '0.49'
730
+ VersionAdded: '0.68'
684
731
  # The value `special_inside_parentheses` means that hash literals with braces
685
732
  # that have their opening brace on the same line as a surrounding opening
686
733
  # round parenthesis, shall have their first key indented relative to the
@@ -701,14 +748,29 @@ Layout/IndentHash:
701
748
  # But it can be overridden by setting this parameter
702
749
  IndentationWidth: ~
703
750
 
751
+ Layout/IndentFirstParameter:
752
+ Description: >-
753
+ Checks the indentation of the first parameter in a
754
+ method definition.
755
+ Enabled: true
756
+ VersionAdded: '0.49'
757
+ VersionChanged: '0.68'
758
+ EnforcedStyle: consistent
759
+ SupportedStyles:
760
+ - consistent
761
+ - align_parentheses
762
+ # By default, the indentation width from `Layout/IndentationWidth` is used
763
+ # But it can be overridden by setting this parameter
764
+ IndentationWidth: ~
765
+
704
766
  Layout/IndentHeredoc:
705
767
  Description: 'This cop checks the indentation of the here document bodies.'
706
768
  StyleGuide: '#squiggly-heredocs'
707
769
  Enabled: true
708
770
  VersionAdded: '0.49'
709
- EnforcedStyle: auto_detection
771
+ VersionChanged: '0.69'
772
+ EnforcedStyle: squiggly
710
773
  SupportedStyles:
711
- - auto_detection
712
774
  - squiggly
713
775
  - active_support
714
776
  - powerpack
@@ -719,8 +781,8 @@ Layout/IndentationConsistency:
719
781
  StyleGuide: '#spaces-indentation'
720
782
  Enabled: true
721
783
  VersionAdded: '0.49'
722
- # The difference between `rails` and `normal` is that the `rails` style
723
- # prescribes that in classes and modules the `protected` and `private`
784
+ # The difference between `indented` and `normal` is that the `indented_internal_methods`
785
+ # style prescribes that in classes and modules the `protected` and `private`
724
786
  # modifier keywords shall be indented the same as public methods and that
725
787
  # protected and private members shall be indented one step more than the
726
788
  # modifiers. Other than that, both styles mean that entities on the same
@@ -728,7 +790,10 @@ Layout/IndentationConsistency:
728
790
  EnforcedStyle: normal
729
791
  SupportedStyles:
730
792
  - normal
731
- - rails
793
+ - indented_internal_methods
794
+ Reference:
795
+ # A reference to `EnforcedStyle: indented_internal_methods`.
796
+ - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions
732
797
 
733
798
  Layout/IndentationWidth:
734
799
  Description: 'Use 2 spaces for indentation.'
@@ -755,6 +820,8 @@ Layout/LeadingCommentSpace:
755
820
  StyleGuide: '#hash-space'
756
821
  Enabled: true
757
822
  VersionAdded: '0.49'
823
+ VersionChanged: '0.73'
824
+ AllowDoxygenCommentStyle: false
758
825
 
759
826
  Layout/MultilineArrayBraceLayout:
760
827
  Description: >-
@@ -772,6 +839,13 @@ Layout/MultilineArrayBraceLayout:
772
839
  - new_line
773
840
  - same_line
774
841
 
842
+ Layout/MultilineArrayLineBreaks:
843
+ Description: >-
844
+ Checks that each item in a multi-line array literal
845
+ starts on a separate line.
846
+ Enabled: false # As discussed in https://github.com/makandra/makandra-rubocop/issues/10
847
+ VersionAdded: '0.67'
848
+
775
849
  Layout/MultilineAssignmentLayout:
776
850
  Description: 'Check for a newline after the assignment operator in multi-line assignments.'
777
851
  StyleGuide: '#indent-conditional-assignment'
@@ -815,6 +889,20 @@ Layout/MultilineHashBraceLayout:
815
889
  - new_line
816
890
  - same_line
817
891
 
892
+ Layout/MultilineHashKeyLineBreaks:
893
+ Description: >-
894
+ Checks that each item in a multi-line hash literal
895
+ starts on a separate line.
896
+ Enabled: false
897
+ VersionAdded: '0.67'
898
+
899
+ Layout/MultilineMethodArgumentLineBreaks:
900
+ Description: >-
901
+ Checks that each argument in a multi-line method call
902
+ starts on a separate line.
903
+ Enabled: false
904
+ VersionAdded: '0.67'
905
+
818
906
  Layout/MultilineMethodCallBraceLayout:
819
907
  Description: >-
820
908
  Checks that the closing brace in a method call is
@@ -878,7 +966,7 @@ Layout/MultilineOperationIndentation:
878
966
 
879
967
  Layout/RescueEnsureAlignment:
880
968
  Description: 'Align rescues and ensures correctly.'
881
- Enabled: false # Temporarily disabled (see #7 and rubocop-hq/rubocop#6771)
969
+ Enabled: true
882
970
  VersionAdded: '0.49'
883
971
 
884
972
  Layout/SpaceAfterColon:
@@ -1266,7 +1354,7 @@ Lint/ErbNewArguments:
1266
1354
  VersionAdded: '0.56'
1267
1355
 
1268
1356
  Lint/FlipFlop:
1269
- Description: 'Checks for flip-flops'
1357
+ Description: 'Checks for flip-flops.'
1270
1358
  StyleGuide: '#no-flip-flops'
1271
1359
  Enabled: true
1272
1360
  VersionAdded: '0.16'
@@ -1287,7 +1375,17 @@ Lint/HandleExceptions:
1287
1375
  Description: "Don't suppress exception."
1288
1376
  StyleGuide: '#dont-hide-exceptions'
1289
1377
  Enabled: false
1378
+ AllowComments: false
1290
1379
  VersionAdded: '0.9'
1380
+ VersionChanged: '0.70'
1381
+
1382
+ Lint/HeredocMethodCallPosition:
1383
+ Description: >-
1384
+ Checks for the ordering of a method call where
1385
+ the receiver of the call is a HEREDOC.
1386
+ Enabled: false
1387
+ StyleGuide: '#heredoc-method-calls'
1388
+ VersionAdded: '0.68'
1291
1389
 
1292
1390
  Lint/ImplicitStringConcatenation:
1293
1391
  Description: >-
@@ -1314,7 +1412,7 @@ Lint/InheritException:
1314
1412
  - standard_error
1315
1413
 
1316
1414
  Lint/InterpolationCheck:
1317
- Description: 'Raise warning for interpolation in single q strs'
1415
+ Description: 'Raise warning for interpolation in single q strs.'
1318
1416
  Enabled: true
1319
1417
  VersionAdded: '0.50'
1320
1418
 
@@ -1338,7 +1436,7 @@ Lint/Loop:
1338
1436
  VersionAdded: '0.9'
1339
1437
 
1340
1438
  Lint/MissingCopEnableDirective:
1341
- Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`'
1439
+ Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
1342
1440
  Enabled: true
1343
1441
  VersionAdded: '0.52'
1344
1442
  # Maximum number of consecutive lines the cop can be disabled for.
@@ -1382,6 +1480,8 @@ Lint/NumberConversion:
1382
1480
  Description: 'Checks unsafe usage of number conversion methods.'
1383
1481
  Enabled: false
1384
1482
  VersionAdded: '0.53'
1483
+ VersionChanged: '0.70'
1484
+ SafeAutoCorrect: false
1385
1485
 
1386
1486
  Lint/OrderedMagicComments:
1387
1487
  Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
@@ -1400,6 +1500,7 @@ Lint/PercentStringArray:
1400
1500
  Description: >-
1401
1501
  Checks for unwanted commas and quotes in %w/%W literals.
1402
1502
  Enabled: true
1503
+ Safe: false
1403
1504
  VersionAdded: '0.41'
1404
1505
 
1405
1506
  Lint/PercentSymbolArray:
@@ -1415,6 +1516,29 @@ Lint/RandOne:
1415
1516
  Enabled: true
1416
1517
  VersionAdded: '0.36'
1417
1518
 
1519
+ Lint/RedundantCopDisableDirective:
1520
+ Description: >-
1521
+ Checks for rubocop:disable comments that can be removed.
1522
+ Note: this cop is not disabled when disabling all cops.
1523
+ It must be explicitly disabled.
1524
+ Enabled: true
1525
+ VersionAdded: '0.76'
1526
+
1527
+ Lint/RedundantCopEnableDirective:
1528
+ Description: Checks for rubocop:enable comments that can be removed.
1529
+ Enabled: true
1530
+ VersionAdded: '0.76'
1531
+
1532
+ Lint/RedundantRequireStatement:
1533
+ Description: 'Checks for unnecessary `require` statement.'
1534
+ Enabled: true
1535
+ VersionAdded: '0.76'
1536
+
1537
+ Lint/RedundantSplatExpansion:
1538
+ Description: 'Checks for splat unnecessarily being called on literals.'
1539
+ Enabled: true
1540
+ VersionChanged: '0.76'
1541
+
1418
1542
  Lint/RedundantWithIndex:
1419
1543
  Description: 'Checks for redundant `with_index`.'
1420
1544
  Enabled: true
@@ -1483,12 +1607,22 @@ Lint/SafeNavigationConsistency:
1483
1607
  - try!
1484
1608
 
1485
1609
 
1610
+ Lint/SafeNavigationWithEmpty:
1611
+ Description: 'Avoid `foo&.empty?` in conditionals.'
1612
+ Enabled: true
1613
+ VersionAdded: '0.62'
1614
+
1486
1615
  Lint/ScriptPermission:
1487
1616
  Description: 'Grant script file execute permission.'
1488
1617
  Enabled: true
1489
1618
  VersionAdded: '0.49'
1490
1619
  VersionChanged: '0.50'
1491
1620
 
1621
+ Lint/SendWithMixinArgument:
1622
+ Description: 'Checks for `send` method when using mixin.'
1623
+ Enabled: true
1624
+ VersionAdded: '0.75'
1625
+
1492
1626
  Lint/ShadowedArgument:
1493
1627
  Description: 'Avoid reassigning arguments before they were used.'
1494
1628
  Enabled: true
@@ -1518,41 +1652,23 @@ Lint/StringConversionInInterpolation:
1518
1652
  VersionChanged: '0.20'
1519
1653
 
1520
1654
  Lint/Syntax:
1521
- Description: 'Checks syntax error'
1655
+ Description: 'Checks syntax error.'
1522
1656
  Enabled: true
1523
1657
  VersionAdded: '0.9'
1524
1658
 
1525
1659
 
1660
+ Lint/ToJSON:
1661
+ Description: 'Ensure #to_json includes an optional argument.'
1662
+ Enabled: true
1663
+
1526
1664
  Lint/UnderscorePrefixedVariableName:
1527
1665
  Description: 'Do not use prefix `_` for a variable that is used.'
1528
1666
  Enabled: true
1529
1667
  VersionAdded: '0.21'
1668
+ AllowKeywordBlockArguments: false
1530
1669
 
1531
1670
  Lint/UnifiedInteger:
1532
- Description: 'Use Integer instead of Fixnum or Bignum'
1533
- Enabled: true
1534
- VersionAdded: '0.43'
1535
-
1536
- Lint/UnneededCopDisableDirective:
1537
- Description: >-
1538
- Checks for rubocop:disable comments that can be removed.
1539
- Note: this cop is not disabled when disabling all cops.
1540
- It must be explicitly disabled.
1541
- Enabled: true
1542
- VersionAdded: '0.53'
1543
-
1544
- Lint/UnneededCopEnableDirective:
1545
- Description: Checks for rubocop:enable comments that can be removed.
1546
- Enabled: true
1547
- VersionAdded: '0.53'
1548
-
1549
- Lint/UnneededRequireStatement:
1550
- Description: 'Checks for unnecessary `require` statement.'
1551
- Enabled: true
1552
- VersionAdded: '0.51'
1553
-
1554
- Lint/UnneededSplatExpansion:
1555
- Description: 'Checks for splat unnecessarily being called on literals'
1671
+ Description: 'Use Integer instead of Fixnum or Bignum.'
1556
1672
  Enabled: true
1557
1673
  VersionAdded: '0.43'
1558
1674
 
@@ -1636,9 +1752,12 @@ Metrics/AbcSize:
1636
1752
  Description: >-
1637
1753
  A calculated magnitude based on number of assignments,
1638
1754
  branches, and conditions.
1639
- Reference: 'http://c2.com/cgi/wiki?AbcMetric'
1755
+ Reference:
1756
+ - http://c2.com/cgi/wiki?AbcMetric
1757
+ - https://en.wikipedia.org/wiki/ABC_Software_Metric
1640
1758
  Enabled: false
1641
1759
  VersionAdded: '0.27'
1760
+ VersionChanged: '0.66'
1642
1761
  # The ABC size is a calculated magnitude, so this number can be an Integer or
1643
1762
  # a Float.
1644
1763
  Max: 15
@@ -1647,16 +1766,18 @@ Metrics/BlockLength:
1647
1766
  Description: 'Avoid long blocks with many lines.'
1648
1767
  Enabled: false
1649
1768
  VersionAdded: '0.44'
1650
- VersionChanged: '0.58'
1769
+ VersionChanged: '0.66'
1651
1770
  CountComments: false # count full line comments?
1652
1771
  Max: 25
1653
1772
  ExcludedMethods:
1654
1773
  # By default, exclude the `#refine` method, as it tends to have larger
1655
1774
  # associated blocks.
1656
1775
  - refine
1776
+ Exclude:
1777
+ - '**/*.gemspec'
1657
1778
 
1658
1779
  Metrics/BlockNesting:
1659
- Description: 'Avoid excessive block nesting'
1780
+ Description: 'Avoid excessive block nesting.'
1660
1781
  StyleGuide: '#three-is-the-number-thou-shalt-count'
1661
1782
  Enabled: false
1662
1783
  VersionAdded: '0.25'
@@ -1685,7 +1806,8 @@ Metrics/LineLength:
1685
1806
  StyleGuide: '#80-character-limits'
1686
1807
  Enabled: false
1687
1808
  VersionAdded: '0.25'
1688
- VersionChanged: '0.46'
1809
+ VersionChanged: '0.68'
1810
+ AutoCorrect: false
1689
1811
  Max: 80
1690
1812
  # To make it possible to copy or click on URIs in the code, we allow lines
1691
1813
  # containing a URI to be longer than Max.
@@ -1735,6 +1857,14 @@ Metrics/PerceivedComplexity:
1735
1857
  VersionAdded: '0.25'
1736
1858
  Max: 7
1737
1859
 
1860
+ ################## Migration #############################
1861
+
1862
+ Migration/DepartmentName:
1863
+ Description: >-
1864
+ Check that cop names in rubocop:disable (etc) comments are
1865
+ given with department name.
1866
+ Enabled: false
1867
+
1738
1868
  #################### Naming ##############################
1739
1869
 
1740
1870
  Naming/AccessorMethodName:
@@ -1870,6 +2000,13 @@ Naming/MethodName:
1870
2000
  SupportedStyles:
1871
2001
  - snake_case
1872
2002
  - camelCase
2003
+ # Method names matching patterns are always allowed.
2004
+ #
2005
+ # IgnoredPatterns:
2006
+ # - '\A\s*onSelectionBulkChange\s*'
2007
+ # - '\A\s*onSelectionCleared\s*'
2008
+ #
2009
+ IgnoredPatterns: []
1873
2010
 
1874
2011
  Naming/PredicateName:
1875
2012
  Description: 'Check the names of predicate methods.'
@@ -1900,6 +2037,13 @@ Naming/PredicateName:
1900
2037
  Exclude:
1901
2038
  - 'spec/**/*'
1902
2039
 
2040
+ Naming/RescuedExceptionsVariableName:
2041
+ Description: 'Use consistent rescued exceptions variables naming.'
2042
+ Enabled: true
2043
+ VersionAdded: '0.67'
2044
+ VersionChanged: '0.68'
2045
+ PreferredName: e
2046
+
1903
2047
  Naming/UncommunicativeBlockParamName:
1904
2048
  Description: >-
1905
2049
  Checks for block parameter names that contain capital letters,
@@ -1935,6 +2079,7 @@ Naming/UncommunicativeMethodParamName:
1935
2079
  - at
1936
2080
  - ip
1937
2081
  - db
2082
+ - os
1938
2083
  # Blacklisted names that will register an offense
1939
2084
  ForbiddenNames: []
1940
2085
 
@@ -1959,775 +2104,110 @@ Naming/VariableNumber:
1959
2104
  - normalcase
1960
2105
  - non_integer
1961
2106
 
1962
- #################### Performance ###########################
2107
+ #################### Security ##############################
1963
2108
 
1964
- Performance/Caller:
1965
- Description: >-
1966
- Use `caller(n..n)` instead of `caller`.
1967
- Enabled: true
1968
- VersionAdded: '0.49'
2109
+ Security/Eval:
2110
+ Description: 'The use of eval represents a serious security risk.'
2111
+ Enabled: false # We all know not to eval. If we need to, there will be a reason.
2112
+ VersionAdded: '0.47'
1969
2113
 
1970
- Performance/CaseWhenSplat:
2114
+ Security/JSONLoad:
1971
2115
  Description: >-
1972
- Reordering `when` conditions with a splat to the end
1973
- of the `when` branches can improve performance.
1974
- Enabled: false
2116
+ Prefer usage of `JSON.parse` over `JSON.load` due to potential
2117
+ security issues. See reference for more information.
2118
+ Reference: 'https://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method-i-load'
2119
+ Enabled: true
2120
+ VersionAdded: '0.43'
2121
+ VersionChanged: '0.44'
2122
+ # Autocorrect here will change to a method that may cause crashes depending
2123
+ # on the value of the argument.
1975
2124
  AutoCorrect: false
1976
2125
  SafeAutoCorrect: false
1977
- VersionAdded: '0.34'
1978
- VersionChanged: '0.59'
1979
-
1980
- Performance/Casecmp:
1981
- Description: >-
1982
- Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`..
1983
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringcasecmp-vs-stringdowncase---code'
1984
- Enabled: false
1985
- VersionAdded: '0.36'
1986
2126
 
1987
- Performance/ChainArrayAllocation:
2127
+ Security/MarshalLoad:
1988
2128
  Description: >-
1989
- Instead of chaining array methods that allocate new arrays, mutate an
1990
- existing array.
1991
- Reference: 'https://twitter.com/schneems/status/1034123879978029057'
1992
- Enabled: false
1993
- VersionAdded: '0.59'
1994
-
1995
- Performance/CompareWithBlock:
1996
- Description: 'Use `sort_by(&:foo)` instead of `sort { |a, b| a.foo <=> b.foo }`.'
2129
+ Avoid using of `Marshal.load` or `Marshal.restore` due to potential
2130
+ security issues. See reference for more information.
2131
+ Reference: 'https://ruby-doc.org/core-2.3.3/Marshal.html#module-Marshal-label-Security+considerations'
1997
2132
  Enabled: true
1998
- VersionAdded: '0.46'
1999
-
2000
- Performance/Count:
2001
- Description: >-
2002
- Use `count` instead of `select...size`, `reject...size`,
2003
- `select...count`, `reject...count`, `select...length`,
2004
- and `reject...length`.
2005
- # This cop has known compatibility issues with `ActiveRecord` and other
2006
- # frameworks. ActiveRecord's `count` ignores the block that is passed to it.
2007
- # For more information, see the documentation in the cop itself.
2008
- # If you understand the known risk, you can disable `SafeMode`.
2009
- SafeMode: true
2010
- Enabled: false
2011
- VersionAdded: '0.31'
2012
- VersionChanged: '0.39'
2133
+ VersionAdded: '0.47'
2013
2134
 
2014
- Performance/Detect:
2015
- Description: >-
2016
- Use `detect` instead of `select.first`, `find_all.first`,
2017
- `select.last`, and `find_all.last`.
2018
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code'
2019
- # This cop has known compatibility issues with `ActiveRecord` and other
2020
- # frameworks. `ActiveRecord` does not implement a `detect` method and `find`
2021
- # has its own meaning. Correcting `ActiveRecord` methods with this cop
2022
- # should be considered unsafe.
2023
- SafeMode: true
2135
+ Security/Open:
2136
+ Description: 'The use of Kernel#open represents a serious security risk.'
2024
2137
  Enabled: true
2025
- VersionAdded: '0.30'
2026
- VersionChanged: '0.39'
2138
+ VersionAdded: '0.53'
2139
+ Safe: false
2027
2140
 
2028
- Performance/DoubleStartEndWith:
2141
+ Security/YAMLLoad:
2029
2142
  Description: >-
2030
- Use `str.{start,end}_with?(x, ..., y, ...)`
2031
- instead of `str.{start,end}_with?(x, ...) || str.{start,end}_with?(y, ...)`.
2143
+ Prefer usage of `YAML.safe_load` over `YAML.load` due to potential
2144
+ security issues. See reference for more information.
2145
+ Reference: 'https://ruby-doc.org/stdlib-2.3.3/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security'
2032
2146
  Enabled: true
2033
- VersionAdded: '0.36'
2034
- VersionChanged: '0.48'
2035
- # Used to check for `starts_with?` and `ends_with?`.
2036
- # These methods are defined by `ActiveSupport`.
2037
- IncludeActiveSupportAliases: false
2038
-
2039
- Performance/EndWith:
2040
- Description: 'Use `end_with?` instead of a regex match anchored to the end of a string.'
2041
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
2042
- # This will change to a new method call which isn't guaranteed to be on the
2043
- # object. Switching these methods has to be done with knowledge of the types
2044
- # of the variables which rubocop doesn't have.
2147
+ VersionAdded: '0.47'
2045
2148
  SafeAutoCorrect: false
2046
- AutoCorrect: false
2047
- Enabled: false
2048
- VersionAdded: '0.36'
2049
- VersionChanged: '0.44'
2050
2149
 
2051
- Performance/FixedSize:
2052
- Description: 'Do not compute the size of statically sized objects except in constants'
2053
- Enabled: false
2054
- VersionAdded: '0.35'
2150
+ #################### Style ###############################
2055
2151
 
2056
- Performance/FlatMap:
2057
- Description: >-
2058
- Use `Enumerable#flat_map`
2059
- instead of `Enumerable#map...Array#flatten(1)`
2060
- or `Enumberable#collect..Array#flatten(1)`
2061
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code'
2152
+ Style/AccessModifierDeclarations:
2153
+ Description: 'Checks style of how access modifiers are used.'
2062
2154
  Enabled: true
2063
- VersionAdded: '0.30'
2064
- EnabledForFlattenWithoutParams: false
2065
- # If enabled, this cop will warn about usages of
2066
- # `flatten` being called without any parameters.
2067
- # This can be dangerous since `flat_map` will only flatten 1 level, and
2068
- # `flatten` without any parameters can flatten multiple levels.
2155
+ VersionAdded: '0.57'
2156
+ EnforcedStyle: group
2157
+ SupportedStyles:
2158
+ - inline
2159
+ - group
2069
2160
 
2070
- Performance/InefficientHashSearch:
2071
- Description: 'Use `key?` or `value?` instead of `keys.include?` or `values.include?`'
2072
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashkey-instead-of-hashkeysinclude-code'
2161
+ Style/Alias:
2162
+ Description: 'Use alias instead of alias_method.'
2163
+ StyleGuide: '#alias-method-lexically'
2073
2164
  Enabled: true
2074
- VersionAdded: '0.56'
2075
- Safe: false
2165
+ VersionAdded: '0.9'
2166
+ VersionChanged: '0.36'
2167
+ EnforcedStyle: prefer_alias_method
2168
+ SupportedStyles:
2169
+ - prefer_alias
2170
+ - prefer_alias_method
2076
2171
 
2077
- Performance/LstripRstrip:
2078
- Description: 'Use `strip` instead of `lstrip.rstrip`.'
2172
+ Style/AndOr:
2173
+ Description: 'Use &&/|| instead of and/or.'
2174
+ StyleGuide: '#no-and-or-or'
2079
2175
  Enabled: true
2080
- VersionAdded: '0.36'
2081
-
2082
- Performance/OpenStruct:
2083
- Description: 'Use `Struct` instead of `OpenStruct`.'
2084
- Enabled: false
2085
- VersionAdded: '0.61'
2086
- Safe: false
2176
+ VersionAdded: '0.9'
2177
+ VersionChanged: '0.25'
2178
+ # Whether `and` and `or` are banned only in conditionals (conditionals)
2179
+ # or completely (always).
2180
+ EnforcedStyle: always
2181
+ SupportedStyles:
2182
+ - always
2183
+ - conditionals
2087
2184
 
2088
- Performance/RangeInclude:
2089
- Description: 'Use `Range#cover?` instead of `Range#include?`.'
2090
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code'
2185
+ Style/ArrayJoin:
2186
+ Description: 'Use Array#join instead of Array#*.'
2187
+ StyleGuide: '#array-join'
2091
2188
  Enabled: true
2092
- VersionAdded: '0.36'
2093
- Safe: false
2189
+ VersionAdded: '0.20'
2190
+ VersionChanged: '0.31'
2094
2191
 
2095
- Performance/RedundantBlockCall:
2096
- Description: 'Use `yield` instead of `block.call`.'
2097
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#proccall-and-block-arguments-vs-yieldcode'
2192
+ Style/AsciiComments:
2193
+ Description: 'Use only ascii symbols in comments.'
2194
+ StyleGuide: '#english-comments'
2098
2195
  Enabled: false
2099
- VersionAdded: '0.36'
2196
+ VersionAdded: '0.9'
2197
+ VersionChanged: '0.52'
2198
+ AllowedChars: []
2100
2199
 
2101
- Performance/RedundantMatch:
2102
- Description: >-
2103
- Use `=~` instead of `String#match` or `Regexp#match` in a context where the
2104
- returned `MatchData` is not needed.
2200
+ Style/Attr:
2201
+ Description: 'Checks for uses of Module#attr.'
2202
+ StyleGuide: '#attr'
2105
2203
  Enabled: true
2106
- VersionAdded: '0.36'
2204
+ VersionAdded: '0.9'
2205
+ VersionChanged: '0.12'
2107
2206
 
2108
- Performance/RedundantMerge:
2109
- Description: 'Use Hash#[]=, rather than Hash#merge! with a single key-value pair.'
2110
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashmerge-vs-hash-code'
2207
+ Style/AutoResourceCleanup:
2208
+ Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
2111
2209
  Enabled: false
2112
- VersionAdded: '0.36'
2113
- # Max number of key-value pairs to consider an offense
2114
- MaxKeyValuePairs: 2
2115
-
2116
- Performance/RedundantSortBy:
2117
- Description: 'Use `sort` instead of `sort_by { |x| x }`.'
2118
- Enabled: true
2119
- VersionAdded: '0.36'
2120
-
2121
- Performance/RegexpMatch:
2122
- Description: >-
2123
- Use `match?` instead of `Regexp#match`, `String#match`, `Symbol#match`,
2124
- `Regexp#===`, or `=~` when `MatchData` is not used.
2125
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#regexp-vs-stringmatch-vs-string-vs-stringmatch-code-'
2126
- Enabled: true
2127
- VersionAdded: '0.47'
2128
-
2129
- Performance/ReverseEach:
2130
- Description: 'Use `reverse_each` instead of `reverse.each`.'
2131
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code'
2132
- Enabled: true
2133
- VersionAdded: '0.30'
2134
-
2135
- Performance/Sample:
2136
- Description: >-
2137
- Use `sample` instead of `shuffle.first`,
2138
- `shuffle.last`, and `shuffle[Integer]`.
2139
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
2140
- Enabled: true
2141
- VersionAdded: '0.30'
2142
-
2143
- Performance/Size:
2144
- Description: >-
2145
- Use `size` instead of `count` for counting
2146
- the number of elements in `Array` and `Hash`.
2147
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#arraylength-vs-arraysize-vs-arraycount-code'
2148
- Enabled: true
2149
- VersionAdded: '0.30'
2150
-
2151
- Performance/StartWith:
2152
- Description: 'Use `start_with?` instead of a regex match anchored to the beginning of a string.'
2153
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringmatch-vs-stringstart_withstringend_with-code-start-code-end'
2154
- # This will change to a new method call which isn't guaranteed to be on the
2155
- # object. Switching these methods has to be done with knowledge of the types
2156
- # of the variables which rubocop doesn't have.
2157
- SafeAutoCorrect: false
2158
- AutoCorrect: false
2159
- Enabled: false
2160
- VersionAdded: '0.36'
2161
- VersionChanged: '0.44'
2162
-
2163
- Performance/StringReplacement:
2164
- Description: >-
2165
- Use `tr` instead of `gsub` when you are replacing the same
2166
- number of characters. Use `delete` instead of `gsub` when
2167
- you are deleting characters.
2168
- Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code'
2169
- Enabled: false
2170
- VersionAdded: '0.33'
2171
-
2172
- Performance/TimesMap:
2173
- Description: 'Checks for .times.map calls.'
2174
- AutoCorrect: false
2175
- Enabled: true
2176
- VersionAdded: '0.36'
2177
- VersionChanged: '0.50'
2178
- SafeAutoCorrect: false # see https://github.com/rubocop-hq/rubocop/issues/4658
2179
-
2180
- Performance/UnfreezeString:
2181
- Description: 'Use unary plus to get an unfrozen string literal.'
2182
- Enabled: false
2183
- VersionAdded: '0.50'
2184
-
2185
- Performance/UnneededSort:
2186
- Description: >-
2187
- Use `min` instead of `sort.first`,
2188
- `max_by` instead of `sort_by...last`, etc.
2189
- Enabled: true
2190
- VersionAdded: '0.55'
2191
-
2192
- Performance/UriDefaultParser:
2193
- Description: 'Use `URI::DEFAULT_PARSER` instead of `URI::Parser.new`.'
2194
- Enabled: true
2195
- VersionAdded: '0.50'
2196
-
2197
- #################### Rails #################################
2198
-
2199
- # By default, the rails cops are not run. Override in project or home
2200
- # directory .rubocop.yml files, or by giving the -R/--rails option.
2201
- Rails:
2202
- Enabled: false
2203
-
2204
- Rails/ActionFilter:
2205
- Description: 'Enforces consistent use of action filter methods.'
2206
- Enabled: true
2207
- VersionAdded: '0.19'
2208
- EnforcedStyle: action
2209
- SupportedStyles:
2210
- - action
2211
- - filter
2212
- Include:
2213
- - app/controllers/**/*.rb
2214
-
2215
- Rails/ActiveRecordAliases:
2216
- Description: >-
2217
- Avoid Active Record aliases:
2218
- Use `update` instead of `update_attributes`.
2219
- Use `update!` instead of `update_attributes!`.
2220
- Enabled: true
2221
- VersionAdded: '0.53'
2222
-
2223
- Rails/ActiveSupportAliases:
2224
- Description: >-
2225
- Avoid ActiveSupport aliases of standard ruby methods:
2226
- `String#starts_with?`, `String#ends_with?`,
2227
- `Array#append`, `Array#prepend`.
2228
- Enabled: false
2229
- VersionAdded: '0.48'
2230
-
2231
- Rails/ApplicationJob:
2232
- Description: 'Check that jobs subclass ApplicationJob.'
2233
- Enabled: true
2234
- VersionAdded: '0.49'
2235
-
2236
- Rails/ApplicationRecord:
2237
- Description: 'Check that models subclass ApplicationRecord.'
2238
- Enabled: false # Because not all models are necessarily domain models (e.g. migration models for legacy databases)
2239
- VersionAdded: '0.49'
2240
-
2241
- Rails/AssertNot:
2242
- Description: 'Use `assert_not` instead of `assert !`.'
2243
- Enabled: true
2244
- VersionAdded: '0.56'
2245
- Include:
2246
- - '**/test/**/*'
2247
-
2248
- Rails/BelongsTo:
2249
- Description: >-
2250
- Use `optional: true` instead of `required: false` for
2251
- `belongs_to` relations'
2252
- Enabled: true
2253
- VersionAdded: '0.62'
2254
-
2255
- Rails/Blank:
2256
- Description: 'Enforces use of `blank?`.'
2257
- Enabled: true
2258
- VersionAdded: '0.48'
2259
- # Convert usages of `nil? || empty?` to `blank?`
2260
- NilOrEmpty: true
2261
- # Convert usages of `!present?` to `blank?`
2262
- NotPresent: true
2263
- # Convert usages of `unless present?` to `if blank?`
2264
- UnlessPresent: true
2265
-
2266
- Rails/BulkChangeTable:
2267
- Description: 'Check whether alter queries are combinable.'
2268
- Enabled: false # We'll maybe enable this later.
2269
- VersionAdded: '0.57'
2270
- Database: null
2271
- SupportedDatabases:
2272
- - mysql
2273
- - postgresql
2274
- Include:
2275
- - db/migrate/*.rb
2276
-
2277
- Rails/CreateTableWithTimestamps:
2278
- Description: >-
2279
- Checks the migration for which timestamps are not included
2280
- when creating a new table.
2281
- Enabled: true
2282
- VersionAdded: '0.52'
2283
- Include:
2284
- - db/migrate/*.rb
2285
-
2286
- Rails/Date:
2287
- Description: >-
2288
- Checks the correct usage of date aware methods,
2289
- such as Date.today, Date.current etc.
2290
- Enabled: false # It's not that simple. Really.
2291
- VersionAdded: '0.30'
2292
- VersionChanged: '0.33'
2293
- # The value `strict` disallows usage of `Date.today`, `Date.current`,
2294
- # `Date#to_time` etc.
2295
- # The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc
2296
- # (but not `Date.today`) which are overridden by ActiveSupport to handle current
2297
- # time zone.
2298
- EnforcedStyle: flexible
2299
- SupportedStyles:
2300
- - strict
2301
- - flexible
2302
-
2303
- Rails/Delegate:
2304
- Description: 'Prefer delegate method for delegations.'
2305
- Enabled: false
2306
- VersionAdded: '0.21'
2307
- VersionChanged: '0.50'
2308
- # When set to true, using the target object as a prefix of the
2309
- # method name without using the `delegate` method will be a
2310
- # violation. When set to false, this case is legal.
2311
- EnforceForPrefixed: true
2312
-
2313
- Rails/DelegateAllowBlank:
2314
- Description: 'Do not use allow_blank as an option to delegate.'
2315
- Enabled: true
2316
- VersionAdded: '0.44'
2317
-
2318
- Rails/DynamicFindBy:
2319
- Description: 'Use `find_by` instead of dynamic `find_by_*`.'
2320
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by'
2321
- Enabled: false # We occasionally define custom find_by_* methods (e.g. `find_by_anything`) which don't work like ActiveRecord's methods.
2322
- VersionAdded: '0.44'
2323
- Whitelist:
2324
- - find_by_sql
2325
-
2326
- Rails/EnumUniqueness:
2327
- Description: 'Avoid duplicate integers in hash-syntax `enum` declaration.'
2328
- Enabled: true
2329
- VersionAdded: '0.46'
2330
- Include:
2331
- - app/models/**/*.rb
2332
-
2333
- Rails/EnvironmentComparison:
2334
- Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`"
2335
- Enabled: true
2336
- VersionAdded: '0.52'
2337
-
2338
- Rails/Exit:
2339
- Description: >-
2340
- Favor `fail`, `break`, `return`, etc. over `exit` in
2341
- application or library code outside of Rake files to avoid
2342
- exits during unit testing or running in production.
2343
- Enabled: true
2344
- VersionAdded: '0.41'
2345
- Include:
2346
- - app/**/*.rb
2347
- - config/**/*.rb
2348
- - lib/**/*.rb
2349
- Exclude:
2350
- - lib/**/*.rake
2351
-
2352
- Rails/FilePath:
2353
- Description: 'Use `Rails.root.join` for file path joining.'
2354
- Enabled: false
2355
- VersionAdded: '0.47'
2356
- VersionChanged: '0.57'
2357
- EnforcedStyle: arguments
2358
- SupportedStyles:
2359
- - slashes
2360
- - arguments
2361
-
2362
- Rails/FindBy:
2363
- Description: 'Prefer find_by over where.first.'
2364
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find_by'
2365
- Enabled: false
2366
- VersionAdded: '0.30'
2367
- Include:
2368
- - app/models/**/*.rb
2369
-
2370
- Rails/FindEach:
2371
- Description: 'Prefer all.find_each over all.find.'
2372
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#find-each'
2373
- Enabled: true
2374
- VersionAdded: '0.30'
2375
- Include:
2376
- - app/models/**/*.rb
2377
-
2378
- Rails/HasAndBelongsToMany:
2379
- Description: 'Prefer has_many :through to has_and_belongs_to_many.'
2380
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has-many-through'
2381
- Enabled: true
2382
- VersionAdded: '0.12'
2383
- Include:
2384
- - app/models/**/*.rb
2385
-
2386
- Rails/HasManyOrHasOneDependent:
2387
- Description: 'Define the dependent option to the has_many and has_one associations.'
2388
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#has_many-has_one-dependent-option'
2389
- Enabled: true
2390
- VersionAdded: '0.50'
2391
- Include:
2392
- - app/models/**/*.rb
2393
-
2394
- Rails/HttpPositionalArguments:
2395
- Description: 'Use keyword arguments instead of positional arguments in http method calls.'
2396
- Enabled: true
2397
- VersionAdded: '0.44'
2398
- Include:
2399
- - 'spec/**/*'
2400
- - 'test/**/*'
2401
-
2402
- Rails/HttpStatus:
2403
- Description: 'Enforces use of symbolic or numeric value to define HTTP status.'
2404
- Enabled: false
2405
- VersionAdded: '0.54'
2406
- EnforcedStyle: symbolic
2407
- SupportedStyles:
2408
- - numeric
2409
- - symbolic
2410
-
2411
- Rails/IgnoredSkipActionFilterOption:
2412
- Description: 'Checks that `if` and `only` (or `except`) are not used together as options of `skip_*` action filter.'
2413
- Reference: 'https://api.rubyonrails.org/classes/AbstractController/Callbacks/ClassMethods.html#method-i-_normalize_callback_options'
2414
- Enabled: true
2415
- VersionAdded: '0.63'
2416
- Include:
2417
- - app/controllers/**/*.rb
2418
-
2419
- Rails/InverseOf:
2420
- Description: 'Checks for associations where the inverse cannot be determined automatically.'
2421
- Enabled: true
2422
- VersionAdded: '0.52'
2423
- Include:
2424
- - app/models/**/*.rb
2425
-
2426
- Rails/LexicallyScopedActionFilter:
2427
- Description: "Checks that methods specified in the filter's `only` or `except` options are explicitly defined in the controller."
2428
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#lexically-scoped-action-filter'
2429
- Enabled: true
2430
- VersionAdded: '0.52'
2431
- Include:
2432
- - app/controllers/**/*.rb
2433
-
2434
- Rails/LinkToBlank:
2435
- Description: 'Checks that `link_to` with a `target: "_blank"` have a `rel: "noopener"` option passed to them.'
2436
- Reference: https://mathiasbynens.github.io/rel-noopener/
2437
- Enabled: true
2438
- VersionAdded: '0.62'
2439
-
2440
- Rails/NotNullColumn:
2441
- Description: 'Do not add a NOT NULL column without a default value'
2442
- Enabled: true
2443
- VersionAdded: '0.43'
2444
- Include:
2445
- - db/migrate/*.rb
2446
-
2447
- Rails/Output:
2448
- Description: 'Checks for calls to puts, print, etc.'
2449
- Enabled: false
2450
- VersionAdded: '0.15'
2451
- VersionChanged: '0.19'
2452
- Include:
2453
- - app/**/*.rb
2454
- - config/**/*.rb
2455
- - db/**/*.rb
2456
- - lib/**/*.rb
2457
-
2458
- Rails/OutputSafety:
2459
- Description: 'The use of `html_safe` or `raw` may be a security risk.'
2460
- Enabled: true # We may need to review this. Unsure if the cop can always know which `html_safe` call is valid and which one is not.
2461
- VersionAdded: '0.41'
2462
-
2463
- Rails/PluralizationGrammar:
2464
- Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.'
2465
- Enabled: true
2466
- VersionAdded: '0.35'
2467
-
2468
- Rails/Presence:
2469
- Description: 'Checks code that can be written more easily using `Object#presence` defined by Active Support.'
2470
- Enabled: true
2471
- VersionAdded: '0.52'
2472
-
2473
- Rails/Present:
2474
- Description: 'Enforces use of `present?`.'
2475
- Enabled: true
2476
- VersionAdded: '0.48'
2477
- # Convert usages of `!nil? && !empty?` to `present?`
2478
- NotNilAndNotEmpty: true
2479
- # Convert usages of `!blank?` to `present?`
2480
- NotBlank: true
2481
- # Convert usages of `unless blank?` to `if present?`
2482
- UnlessBlank: true
2483
-
2484
- Rails/ReadWriteAttribute:
2485
- Description: >-
2486
- Checks for read_attribute(:attr) and
2487
- write_attribute(:attr, val).
2488
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#read-attribute'
2489
- Enabled: true
2490
- VersionAdded: '0.20'
2491
- VersionChanged: '0.29'
2492
- Include:
2493
- - app/models/**/*.rb
2494
-
2495
- Rails/RedundantReceiverInWithOptions:
2496
- Description: 'Checks for redundant receiver in `with_options`.'
2497
- Enabled: true
2498
- VersionAdded: '0.52'
2499
-
2500
- Rails/ReflectionClassName:
2501
- Description: 'Use a string for `class_name` option value in the definition of a reflection.'
2502
- Enabled: true
2503
- VersionAdded: '0.64'
2504
-
2505
- Rails/RefuteMethods:
2506
- Description: 'Use `assert_not` methods instead of `refute` methods.'
2507
- Enabled: true
2508
- VersionAdded: '0.56'
2509
- Include:
2510
- - '**/test/**/*'
2511
-
2512
- Rails/RelativeDateConstant:
2513
- Description: 'Do not assign relative date to constants.'
2514
- Enabled: true
2515
- VersionAdded: '0.48'
2516
- VersionChanged: '0.59'
2517
- AutoCorrect: false
2518
-
2519
- Rails/RequestReferer:
2520
- Description: 'Use consistent syntax for request.referer.'
2521
- Enabled: true
2522
- VersionAdded: '0.41'
2523
- EnforcedStyle: referrer # A typo in a "remote API" (HTTP RFC) should not force us using badly named methods
2524
- SupportedStyles:
2525
- - referer
2526
- - referrer
2527
-
2528
- Rails/ReversibleMigration:
2529
- Description: 'Checks whether the change method of the migration file is reversible.'
2530
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#reversible-migration'
2531
- Reference: 'https://api.rubyonrails.org/classes/ActiveRecord/Migration/CommandRecorder.html'
2532
- Enabled: true
2533
- VersionAdded: '0.47'
2534
- Include:
2535
- - db/migrate/*.rb
2536
-
2537
- Rails/SafeNavigation:
2538
- Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`"
2539
- Enabled: false
2540
- VersionAdded: '0.43'
2541
- # This will convert usages of `try` to use safe navigation as well as `try!`.
2542
- # `try` and `try!` work slightly differently. `try!` and safe navigation will
2543
- # both raise a `NoMethodError` if the receiver of the method call does not
2544
- # implement the intended method. `try` will not raise an exception for this.
2545
- ConvertTry: false
2546
-
2547
- Rails/SaveBang:
2548
- Description: 'Identifies possible cases where Active Record save! or related should be used.'
2549
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#save-bang'
2550
- Enabled: false
2551
- VersionAdded: '0.42'
2552
- VersionChanged: '0.59'
2553
- AllowImplicitReturn: true
2554
- AllowedReceivers: []
2555
-
2556
- Rails/ScopeArgs:
2557
- Description: 'Checks the arguments of ActiveRecord scopes.'
2558
- Enabled: true
2559
- VersionAdded: '0.19'
2560
- Include:
2561
- - app/models/**/*.rb
2562
-
2563
- Rails/SkipsModelValidations:
2564
- Description: >-
2565
- Use methods that skips model validations with caution.
2566
- See reference for more information.
2567
- Reference: 'https://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
2568
- Enabled: false
2569
- VersionAdded: '0.47'
2570
- VersionChanged: '0.60'
2571
- Blacklist:
2572
- - decrement!
2573
- - decrement_counter
2574
- - increment!
2575
- - increment_counter
2576
- - toggle!
2577
- - touch
2578
- - update_all
2579
- - update_attribute
2580
- - update_column
2581
- - update_columns
2582
- - update_counters
2583
- Whitelist: []
2584
-
2585
- Rails/TimeZone:
2586
- Description: 'Checks the correct usage of time zone aware methods.'
2587
- StyleGuide: 'https://github.com/rubocop-hq/rails-style-guide#time'
2588
- Reference: 'http://danilenko.org/2012/7/6/rails_timezones'
2589
- Enabled: false
2590
- VersionAdded: '0.30'
2591
- VersionChanged: '0.33'
2592
- # The value `strict` means that `Time` should be used with `zone`.
2593
- # The value `flexible` allows usage of `in_time_zone` instead of `zone`.
2594
- EnforcedStyle: flexible
2595
- SupportedStyles:
2596
- - strict
2597
- - flexible
2598
-
2599
- Rails/UniqBeforePluck:
2600
- Description: 'Prefer the use of uniq or distinct before pluck.'
2601
- Enabled: true
2602
- VersionAdded: '0.40'
2603
- VersionChanged: '0.47'
2604
- EnforcedStyle: conservative
2605
- SupportedStyles:
2606
- - conservative
2607
- - aggressive
2608
- AutoCorrect: false
2609
-
2610
- Rails/UnknownEnv:
2611
- Description: 'Use correct environment name.'
2612
- Enabled: true
2613
- VersionAdded: '0.51'
2614
- Environments:
2615
- - development
2616
- - test
2617
- - production
2618
-
2619
- Rails/Validation:
2620
- Description: 'Use validates :attribute, hash of validations.'
2621
- Enabled: true
2622
- VersionAdded: '0.9'
2623
- VersionChanged: '0.41'
2624
- Include:
2625
- - app/models/**/*.rb
2626
-
2627
- #################### Security ##############################
2628
-
2629
- Security/Eval:
2630
- Description: 'The use of eval represents a serious security risk.'
2631
- Enabled: false # We all know not to eval. If we need to, there will be a reason.
2632
- VersionAdded: '0.47'
2633
-
2634
- Security/JSONLoad:
2635
- Description: >-
2636
- Prefer usage of `JSON.parse` over `JSON.load` due to potential
2637
- security issues. See reference for more information.
2638
- Reference: 'https://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method-i-load'
2639
- Enabled: true
2640
- VersionAdded: '0.43'
2641
- VersionChanged: '0.44'
2642
- # Autocorrect here will change to a method that may cause crashes depending
2643
- # on the value of the argument.
2644
- AutoCorrect: false
2645
- SafeAutoCorrect: false
2646
-
2647
- Security/MarshalLoad:
2648
- Description: >-
2649
- Avoid using of `Marshal.load` or `Marshal.restore` due to potential
2650
- security issues. See reference for more information.
2651
- Reference: 'https://ruby-doc.org/core-2.3.3/Marshal.html#module-Marshal-label-Security+considerations'
2652
- Enabled: true
2653
- VersionAdded: '0.47'
2654
-
2655
- Security/Open:
2656
- Description: 'The use of Kernel#open represents a serious security risk.'
2657
- Enabled: true
2658
- VersionAdded: '0.53'
2659
- Safe: false
2660
-
2661
- Security/YAMLLoad:
2662
- Description: >-
2663
- Prefer usage of `YAML.safe_load` over `YAML.load` due to potential
2664
- security issues. See reference for more information.
2665
- Reference: 'https://ruby-doc.org/stdlib-2.3.3/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security'
2666
- Enabled: true
2667
- VersionAdded: '0.47'
2668
- SafeAutoCorrect: false
2669
-
2670
- #################### Style ###############################
2671
-
2672
- Style/AccessModifierDeclarations:
2673
- Description: 'Checks style of how access modifiers are used.'
2674
- Enabled: true
2675
- VersionAdded: '0.57'
2676
- EnforcedStyle: group
2677
- SupportedStyles:
2678
- - inline
2679
- - group
2680
-
2681
- Style/Alias:
2682
- Description: 'Use alias instead of alias_method.'
2683
- StyleGuide: '#alias-method'
2684
- Enabled: true
2685
- VersionAdded: '0.9'
2686
- VersionChanged: '0.36'
2687
- EnforcedStyle: prefer_alias_method
2688
- SupportedStyles:
2689
- - prefer_alias
2690
- - prefer_alias_method
2691
-
2692
- Style/AndOr:
2693
- Description: 'Use &&/|| instead of and/or.'
2694
- StyleGuide: '#no-and-or-or'
2695
- Enabled: true
2696
- VersionAdded: '0.9'
2697
- VersionChanged: '0.25'
2698
- # Whether `and` and `or` are banned only in conditionals (conditionals)
2699
- # or completely (always).
2700
- EnforcedStyle: always
2701
- SupportedStyles:
2702
- - always
2703
- - conditionals
2704
-
2705
- Style/ArrayJoin:
2706
- Description: 'Use Array#join instead of Array#*.'
2707
- StyleGuide: '#array-join'
2708
- Enabled: true
2709
- VersionAdded: '0.20'
2710
- VersionChanged: '0.31'
2711
-
2712
- Style/AsciiComments:
2713
- Description: 'Use only ascii symbols in comments.'
2714
- StyleGuide: '#english-comments'
2715
- Enabled: false
2716
- VersionAdded: '0.9'
2717
- VersionChanged: '0.52'
2718
- AllowedChars: []
2719
-
2720
- Style/Attr:
2721
- Description: 'Checks for uses of Module#attr.'
2722
- StyleGuide: '#attr'
2723
- Enabled: true
2724
- VersionAdded: '0.9'
2725
- VersionChanged: '0.12'
2726
-
2727
- Style/AutoResourceCleanup:
2728
- Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).'
2729
- Enabled: false
2730
- VersionAdded: '0.30'
2210
+ VersionAdded: '0.30'
2731
2211
 
2732
2212
  Style/BarePercentLiterals:
2733
2213
  Description: 'Checks if usage of %() or %Q() matches configuration.'
@@ -2768,8 +2248,9 @@ Style/BlockDelimiters:
2768
2248
  - line_count_based
2769
2249
  # The `semantic` style enforces braces around functional blocks, where the
2770
2250
  # primary purpose of the block is to return a value and do..end for
2771
- # procedural blocks, where the primary purpose of the block is its
2772
- # side-effects.
2251
+ # multi-line procedural blocks, where the primary purpose of the block is
2252
+ # its side-effects. Single-line procedural blocks may only use do-end,
2253
+ # unless AllowBracesOnProceduralOneLiners has a truthy value (see below).
2773
2254
  #
2774
2255
  # This looks at the usage of a block's method to determine its type (e.g. is
2775
2256
  # the result of a `map` assigned to a variable or passed to another
@@ -2781,6 +2262,8 @@ Style/BlockDelimiters:
2781
2262
  # return value is being chained with another method (in which case braces
2782
2263
  # are enforced).
2783
2264
  - braces_for_chaining
2265
+ # The `always_braces` style always enforces braces.
2266
+ - always_braces
2784
2267
  ProceduralMethods:
2785
2268
  # Methods that are known to be procedural in nature but look functional from
2786
2269
  # their usage, e.g.
@@ -2830,13 +2313,35 @@ Style/BlockDelimiters:
2830
2313
  - lambda
2831
2314
  - proc
2832
2315
  - it
2316
+ # The AllowBracesOnProceduralOneLiners option is ignored unless the
2317
+ # EnforcedStyle is set to `semantic`. If so:
2318
+ #
2319
+ # If AllowBracesOnProceduralOneLiners is unspecified, or set to any
2320
+ # falsey value, then semantic purity is maintained, so one-line
2321
+ # procedural blocks must use do-end, not braces.
2322
+ #
2323
+ # # bad
2324
+ # collection.each { |element| puts element }
2325
+ #
2326
+ # # good
2327
+ # collection.each do |element| puts element end
2328
+ #
2329
+ # If AllowBracesOnProceduralOneLiners is set to any truthy value,
2330
+ # then one-line procedural blocks may use either style.
2331
+ #
2332
+ # # good
2333
+ # collection.each { |element| puts element }
2334
+ #
2335
+ # # also good
2336
+ # collection.each do |element| puts element end
2337
+ AllowBracesOnProceduralOneLiners: false
2833
2338
 
2834
2339
  Style/BracesAroundHashParameters:
2835
2340
  Description: 'Enforce braces style around hash parameters.'
2836
2341
  Enabled: false # Maybe discuss. We actually do want braces if a single hash is split across multiple lines.
2837
2342
  VersionAdded: '0.14.1'
2838
2343
  VersionChanged: '0.28'
2839
- EnforcedStyle: context_dependent
2344
+ EnforcedStyle: no_braces
2840
2345
  SupportedStyles:
2841
2346
  # The `braces` style enforces braces around all method parameters that are
2842
2347
  # hashes.
@@ -3006,6 +2511,13 @@ Style/ConditionalAssignment:
3006
2511
  SingleLineConditionsOnly: true
3007
2512
  IncludeTernaryExpressions: true
3008
2513
 
2514
+ Style/ConstantVisibility:
2515
+ Description: >-
2516
+ Check that class- and module constants have
2517
+ visibility declarations.
2518
+ Enabled: false
2519
+ VersionAdded: '0.66'
2520
+
3009
2521
  # Checks that you have put a copyright in a comment before any code.
3010
2522
  #
3011
2523
  # You can override the default Notice in your .rubocop.yml file.
@@ -3070,6 +2582,11 @@ Style/DocumentationMethod:
3070
2582
  - 'test/**/*'
3071
2583
  RequireForNonPublicMethods: false
3072
2584
 
2585
+ Style/DoubleCopDisableDirective:
2586
+ Description: 'Checks for double rubocop:disable comments on a single line.'
2587
+ Enabled: true
2588
+ VersionAdded: '0.73'
2589
+
3073
2590
  Style/DoubleNegation:
3074
2591
  Description: 'Checks for uses of double negation (!!).'
3075
2592
  StyleGuide: '#no-bang-bang'
@@ -3096,7 +2613,7 @@ Style/EmptyBlockParameter:
3096
2613
 
3097
2614
  Style/EmptyCaseCondition:
3098
2615
  Description: 'Avoid empty condition in case statements.'
3099
- Enabled: true # Discuss with team.
2616
+ Enabled: true
3100
2617
  VersionAdded: '0.40'
3101
2618
 
3102
2619
  Style/EmptyElse:
@@ -3154,7 +2671,7 @@ Style/EvalWithLocation:
3154
2671
  VersionAdded: '0.52'
3155
2672
 
3156
2673
  Style/EvenOdd:
3157
- Description: 'Favor the use of Integer#even? && Integer#odd?'
2674
+ Description: 'Favor the use of `Integer#even?` && `Integer#odd?`.'
3158
2675
  StyleGuide: '#predicate-methods'
3159
2676
  Enabled: false
3160
2677
  VersionAdded: '0.12'
@@ -3165,6 +2682,19 @@ Style/ExpandPathArguments:
3165
2682
  Enabled: true
3166
2683
  VersionAdded: '0.53'
3167
2684
 
2685
+ Style/FloatDivision:
2686
+ Description: 'For performing float division, coerce one side only.'
2687
+ StyleGuide: '#float-division'
2688
+ Reference: 'https://github.com/rubocop-hq/ruby-style-guide/issues/628'
2689
+ Enabled: false # We disable this cop, it's fine for us to have .to_f on both sides
2690
+ VersionAdded: '0.72'
2691
+ EnforcedStyle: single_coerce
2692
+ SupportedStyles:
2693
+ - left_coerce
2694
+ - right_coerce
2695
+ - single_coerce
2696
+ - fdiv
2697
+
3168
2698
  Style/For:
3169
2699
  Description: 'Checks use of for or each in multiline loops.'
3170
2700
  StyleGuide: '#no-for-loops'
@@ -3179,7 +2709,7 @@ Style/For:
3179
2709
  Style/FormatString:
3180
2710
  Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
3181
2711
  StyleGuide: '#sprintf'
3182
- Enabled: true # Discuss with team.
2712
+ Enabled: true
3183
2713
  VersionAdded: '0.19'
3184
2714
  VersionChanged: '0.49'
3185
2715
  EnforcedStyle: format
@@ -3200,7 +2730,7 @@ Style/FormatStringToken:
3200
2730
  - template
3201
2731
  - unannotated
3202
2732
  VersionAdded: '0.49'
3203
- VersionChanged: '0.52'
2733
+ VersionChanged: '0.75'
3204
2734
 
3205
2735
  Style/FrozenStringLiteralComment:
3206
2736
  Description: >-
@@ -3208,12 +2738,9 @@ Style/FrozenStringLiteralComment:
3208
2738
  to help transition to frozen string literals by default.
3209
2739
  Enabled: false
3210
2740
  VersionAdded: '0.36'
3211
- VersionChanged: '0.47'
3212
- EnforcedStyle: when_needed
2741
+ VersionChanged: '0.69'
2742
+ EnforcedStyle: always
3213
2743
  SupportedStyles:
3214
- # `when_needed` will add the frozen string literal comment to files
3215
- # only when the `TargetRubyVersion` is set to 2.3+.
3216
- - when_needed
3217
2744
  # `always` will always add the frozen string literal comment to a file
3218
2745
  # regardless of the Ruby version or if `freeze` or `<<` are called on a
3219
2746
  # string literal. If you run code against multiple versions of Ruby, it is
@@ -3233,7 +2760,7 @@ Style/GlobalVars:
3233
2760
  AllowedVariables: []
3234
2761
 
3235
2762
  Style/GuardClause:
3236
- Description: 'Check for conditionals that can be replaced with guard clauses'
2763
+ Description: 'Check for conditionals that can be replaced with guard clauses.'
3237
2764
  StyleGuide: '#no-nested-conditionals'
3238
2765
  Enabled: false
3239
2766
  VersionAdded: '0.20'
@@ -3276,6 +2803,7 @@ Style/IdenticalConditionalBranches:
3276
2803
  Style/IfInsideElse:
3277
2804
  Description: 'Finds if nodes inside else, which can be converted to elsif.'
3278
2805
  Enabled: true
2806
+ AllowIfModifier: false
3279
2807
  VersionAdded: '0.36'
3280
2808
 
3281
2809
  Style/IfUnlessModifier:
@@ -3395,6 +2923,8 @@ Style/MethodCallWithArgsParentheses:
3395
2923
  VersionChanged: '0.61'
3396
2924
  IgnoreMacros: true
3397
2925
  IgnoredMethods: []
2926
+ IgnoredPatterns: []
2927
+ IncludedMacros: []
3398
2928
  AllowParenthesesInMultilineCall: false
3399
2929
  AllowParenthesesInChaining: false
3400
2930
  AllowParenthesesInCamelCaseMethod: false
@@ -3440,7 +2970,7 @@ Style/MethodMissingSuper:
3440
2970
  Style/MinMax:
3441
2971
  Description: >-
3442
2972
  Use `Enumerable#minmax` instead of `Enumerable#min`
3443
- and `Enumerable#max` in conjunction.'
2973
+ and `Enumerable#max` in conjunction.
3444
2974
  Enabled: true
3445
2975
  VersionAdded: '0.50'
3446
2976
 
@@ -3450,7 +2980,7 @@ Style/MissingElse:
3450
2980
  If enabled, it is recommended that
3451
2981
  Style/UnlessElse and Style/EmptyElse be enabled.
3452
2982
  This will conflict with Style/EmptyElse if
3453
- Style/EmptyElse is configured to style "both"
2983
+ Style/EmptyElse is configured to style "both".
3454
2984
  Enabled: false
3455
2985
  VersionAdded: '0.30'
3456
2986
  VersionChanged: '0.38'
@@ -3546,6 +3076,12 @@ Style/MultilineTernaryOperator:
3546
3076
  Enabled: true
3547
3077
  VersionAdded: '0.9'
3548
3078
 
3079
+ Style/MultilineWhenThen:
3080
+ Description: 'Do not use then for multi-line when statement.'
3081
+ StyleGuide: '#no-then'
3082
+ Enabled: true
3083
+ VersionAdded: '0.73'
3084
+
3549
3085
  Style/MultipleComparison:
3550
3086
  Description: >-
3551
3087
  Avoid comparing a variable with multiple items in a conditional,
@@ -3586,6 +3122,20 @@ Style/NegatedIf:
3586
3122
  - prefix
3587
3123
  - postfix
3588
3124
 
3125
+ Style/NegatedUnless:
3126
+ Description: 'Favor if over unless for negative conditions.'
3127
+ StyleGuide: '#if-for-negatives'
3128
+ Enabled: false
3129
+ VersionAdded: '0.69'
3130
+ EnforcedStyle: both
3131
+ SupportedStyles:
3132
+ # both: prefix and postfix negated `unless` should both use `if`
3133
+ # prefix: only use `if` for negated `unless` statements positioned before the body of the statement
3134
+ # postfix: only use `if` for negated `unless` statements positioned after the body of the statement
3135
+ - both
3136
+ - prefix
3137
+ - postfix
3138
+
3589
3139
  Style/NegatedWhile:
3590
3140
  Description: 'Favor until over while for negative conditions.'
3591
3141
  StyleGuide: '#until-for-negatives'
@@ -3750,7 +3300,7 @@ Style/OptionHash:
3750
3300
  Style/OptionalArguments:
3751
3301
  Description: >-
3752
3302
  Checks for optional arguments that do not appear at the end
3753
- of the argument list
3303
+ of the argument list.
3754
3304
  StyleGuide: '#optional-arguments'
3755
3305
  Enabled: false # We want to support helpers like link_to where the link text may be the first argument or be defined by a block
3756
3306
  VersionAdded: '0.33'
@@ -3782,7 +3332,7 @@ Style/ParenthesesAroundCondition:
3782
3332
  AllowInMultilineConditions: false
3783
3333
 
3784
3334
  Style/PercentLiteralDelimiters:
3785
- Description: 'Use `%`-literal delimiters consistently'
3335
+ Description: 'Use `%`-literal delimiters consistently.'
3786
3336
  StyleGuide: '#percent-literal-braces'
3787
3337
  Enabled: true
3788
3338
  VersionAdded: '0.19'
@@ -3817,8 +3367,9 @@ Style/PreferredHashMethods:
3817
3367
  Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
3818
3368
  StyleGuide: '#hash-key'
3819
3369
  Enabled: true
3370
+ Safe: false
3820
3371
  VersionAdded: '0.41'
3821
- VersionChanged: '0.44'
3372
+ VersionChanged: '0.70'
3822
3373
  EnforcedStyle: short
3823
3374
  SupportedStyles:
3824
3375
  - short
@@ -3857,6 +3408,16 @@ Style/RedundantBegin:
3857
3408
  VersionAdded: '0.10'
3858
3409
  VersionChanged: '0.21'
3859
3410
 
3411
+ Style/RedundantCapitalW:
3412
+ Description: 'Checks for %W when interpolation is not needed.'
3413
+ Enabled: true
3414
+ VersionAdded: '0.76'
3415
+
3416
+ Style/RedundantCondition:
3417
+ Description: 'Checks for unnecessary conditional expressions.'
3418
+ Enabled: true
3419
+ VersionAdded: '0.76'
3420
+
3860
3421
  Style/RedundantConditional:
3861
3422
  Description: "Don't return true/false from a conditional."
3862
3423
  Enabled: true
@@ -3873,12 +3434,24 @@ Style/RedundantFreeze:
3873
3434
  Description: "Checks usages of Object#freeze on immutable objects."
3874
3435
  Enabled: true
3875
3436
  VersionAdded: '0.34'
3437
+ VersionChanged: '0.66'
3438
+
3439
+ Style/RedundantInterpolation:
3440
+ Description: 'Checks for strings that are just an interpolated expression.'
3441
+ Enabled: true
3442
+ VersionAdded: '0.76'
3876
3443
 
3877
3444
  Style/RedundantParentheses:
3878
3445
  Description: "Checks for parentheses that seem not to serve any purpose."
3879
3446
  Enabled: true
3880
3447
  VersionAdded: '0.36'
3881
3448
 
3449
+ Style/RedundantPercentQ:
3450
+ Description: 'Checks for %q/%Q when single quotes or double quotes would do.'
3451
+ StyleGuide: '#percent-q'
3452
+ Enabled: true
3453
+ VersionAdded: '0.76'
3454
+
3882
3455
  Style/RedundantReturn:
3883
3456
  Description: "Don't use return where it's not required."
3884
3457
  StyleGuide: '#no-explicit-return'
@@ -3895,6 +3468,18 @@ Style/RedundantSelf:
3895
3468
  VersionAdded: '0.10'
3896
3469
  VersionChanged: '0.13'
3897
3470
 
3471
+ Style/RedundantSort:
3472
+ Description: >-
3473
+ Use `min` instead of `sort.first`,
3474
+ `max_by` instead of `sort_by...last`, etc.
3475
+ Enabled: true
3476
+ VersionAdded: '0.76'
3477
+
3478
+ Style/RedundantSortBy:
3479
+ Description: 'Use `sort` instead of `sort_by { |x| x }`.'
3480
+ Enabled: true
3481
+ VersionAdded: '0.36'
3482
+
3898
3483
  Style/RegexpLiteral:
3899
3484
  Description: 'Use / or %r around regular expressions.'
3900
3485
  StyleGuide: '#percent-r'
@@ -3958,6 +3543,14 @@ Style/SafeNavigation:
3958
3543
  - try
3959
3544
  - try!
3960
3545
 
3546
+ Style/Sample:
3547
+ Description: >-
3548
+ Use `sample` instead of `shuffle.first`,
3549
+ `shuffle.last`, and `shuffle[Integer]`.
3550
+ Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
3551
+ Enabled: true
3552
+ VersionAdded: '0.30'
3553
+
3961
3554
  Style/SelfAssignment:
3962
3555
  Description: >-
3963
3556
  Checks for places where self-assignment shorthand should have
@@ -4048,6 +3641,8 @@ Style/StringHashKeys:
4048
3641
  StyleGuide: '#symbols-as-keys'
4049
3642
  Enabled: false
4050
3643
  VersionAdded: '0.52'
3644
+ VersionChanged: '0.75'
3645
+ Safe: false
4051
3646
 
4052
3647
  Style/StringLiterals:
4053
3648
  Description: 'Checks if uses of quotes match the configured preference.'
@@ -4088,6 +3683,11 @@ Style/StringMethods:
4088
3683
  PreferredMethods:
4089
3684
  intern: to_sym
4090
3685
 
3686
+ Style/Strip:
3687
+ Description: 'Use `strip` instead of `lstrip.rstrip`.'
3688
+ Enabled: true
3689
+ VersionAdded: '0.36'
3690
+
4091
3691
  Style/StructInheritance:
4092
3692
  Description: 'Checks for inheritance from Struct.new.'
4093
3693
  StyleGuide: '#no-extend-struct-new'
@@ -4153,7 +3753,7 @@ Style/TrailingBodyOnModule:
4153
3753
  Style/TrailingCommaInArguments:
4154
3754
  Description: 'Checks for trailing comma in argument lists.'
4155
3755
  StyleGuide: '#no-trailing-params-comma'
4156
- Enabled: true # Discuss with team.
3756
+ Enabled: true
4157
3757
  VersionAdded: '0.36'
4158
3758
  # If `comma`, the cop requires a comma after the last argument, but only for
4159
3759
  # parenthesized method calls where each argument is on its own line.
@@ -4168,7 +3768,7 @@ Style/TrailingCommaInArguments:
4168
3768
  Style/TrailingCommaInArrayLiteral:
4169
3769
  Description: 'Checks for trailing comma in array literals.'
4170
3770
  StyleGuide: '#no-trailing-array-commas'
4171
- Enabled: true # Discuss with team.
3771
+ Enabled: true
4172
3772
  VersionAdded: '0.53'
4173
3773
  # but only when each item is on its own line.
4174
3774
  # If `consistent_comma`, the cop requires a comma after the last item of all
@@ -4181,7 +3781,7 @@ Style/TrailingCommaInArrayLiteral:
4181
3781
 
4182
3782
  Style/TrailingCommaInHashLiteral:
4183
3783
  Description: 'Checks for trailing comma in hash literals.'
4184
- Enabled: true # Discuss with team.
3784
+ Enabled: true
4185
3785
  # If `comma`, the cop requires a comma after the last item in a hash,
4186
3786
  # but only when each item is on its own line.
4187
3787
  # If `consistent_comma`, the cop requires a comma after the last item of all
@@ -4262,32 +3862,10 @@ Style/UnlessElse:
4262
3862
  Enabled: true
4263
3863
  VersionAdded: '0.9'
4264
3864
 
4265
- Style/UnneededCapitalW:
4266
- Description: 'Checks for %W when interpolation is not needed.'
4267
- Enabled: true
4268
- VersionAdded: '0.21'
4269
- VersionChanged: '0.24'
4270
-
4271
- Style/UnneededCondition:
4272
- Description: 'Checks for unnecessary conditional expressions.'
4273
- Enabled: true
4274
- VersionAdded: '0.57'
4275
-
4276
- Style/UnneededInterpolation:
4277
- Description: 'Checks for strings that are just an interpolated expression.'
4278
- Enabled: true
4279
- VersionAdded: '0.36'
4280
-
4281
- Style/UnneededPercentQ:
4282
- Description: 'Checks for %q/%Q when single quotes or double quotes would do.'
4283
- StyleGuide: '#percent-q'
4284
- Enabled: false
4285
- VersionAdded: '0.24'
4286
-
4287
3865
  Style/UnpackFirst:
4288
3866
  Description: >-
4289
3867
  Checks for accessing the first element of `String#unpack`
4290
- instead of using `unpack1`
3868
+ instead of using `unpack1`.
4291
3869
  Enabled: false
4292
3870
  VersionAdded: '0.54'
4293
3871
 
@@ -4338,7 +3916,7 @@ Style/WordArray:
4338
3916
  # whose element count is greater than or equal to `MinSize`.
4339
3917
  MinSize: 2
4340
3918
  # The regular expression `WordRegex` decides what is considered a word.
4341
- WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/'
3919
+ WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/'
4342
3920
 
4343
3921
  Style/YodaCondition:
4344
3922
  Description: 'Forbid or enforce yoda conditions.'
@@ -4354,8 +3932,9 @@ Style/YodaCondition:
4354
3932
  - require_for_all_comparison_operators
4355
3933
  # enforce yoda only for equality operators: `!=` and `==`
4356
3934
  - require_for_equality_operators_only
3935
+ Safe: false
4357
3936
  VersionAdded: '0.49'
4358
- VersionChanged: '0.63'
3937
+ VersionChanged: '0.75'
4359
3938
 
4360
3939
  Style/ZeroLengthPredicate:
4361
3940
  Description: 'Use #empty? when testing for objects of length 0.'