rubocop 1.1.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +29 -12
  3. data/config/default.yml +113 -16
  4. data/exe/rubocop +1 -1
  5. data/lib/rubocop.rb +9 -0
  6. data/lib/rubocop/cli/command/execute_runner.rb +26 -11
  7. data/lib/rubocop/config_loader.rb +14 -5
  8. data/lib/rubocop/config_regeneration.rb +1 -1
  9. data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -3
  10. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
  11. data/lib/rubocop/cop/commissioner.rb +1 -1
  12. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  13. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -3
  14. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +4 -5
  15. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  16. data/lib/rubocop/cop/generator.rb +2 -9
  17. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
  18. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -1
  19. data/lib/rubocop/cop/layout/block_alignment.rb +3 -4
  20. data/lib/rubocop/cop/layout/class_structure.rb +15 -3
  21. data/lib/rubocop/cop/layout/else_alignment.rb +15 -2
  22. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +77 -7
  23. data/lib/rubocop/cop/layout/end_alignment.rb +3 -3
  24. data/lib/rubocop/cop/layout/hash_alignment.rb +4 -4
  25. data/lib/rubocop/cop/layout/line_length.rb +8 -1
  26. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +24 -18
  27. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
  28. data/lib/rubocop/cop/layout/space_inside_parens.rb +35 -13
  29. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +2 -1
  30. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +26 -2
  31. data/lib/rubocop/cop/lint/debugger.rb +17 -27
  32. data/lib/rubocop/cop/lint/duplicate_branch.rb +93 -0
  33. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +2 -12
  34. data/lib/rubocop/cop/lint/else_layout.rb +29 -3
  35. data/lib/rubocop/cop/lint/empty_block.rb +38 -2
  36. data/lib/rubocop/cop/lint/empty_class.rb +93 -0
  37. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +22 -4
  38. data/lib/rubocop/cop/lint/loop.rb +4 -4
  39. data/lib/rubocop/cop/lint/missing_super.rb +7 -4
  40. data/lib/rubocop/cop/lint/nested_percent_literal.rb +14 -0
  41. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +58 -0
  42. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +19 -16
  43. data/lib/rubocop/cop/lint/shadowed_exception.rb +4 -5
  44. data/lib/rubocop/cop/lint/to_enum_arguments.rb +6 -15
  45. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +13 -4
  46. data/lib/rubocop/cop/lint/useless_method_definition.rb +2 -4
  47. data/lib/rubocop/cop/lint/useless_setter_call.rb +6 -1
  48. data/lib/rubocop/cop/metrics/method_length.rb +1 -1
  49. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  50. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
  51. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
  52. data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -4
  53. data/lib/rubocop/cop/mixin/visibility_help.rb +1 -3
  54. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +11 -1
  55. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +11 -5
  56. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +67 -18
  57. data/lib/rubocop/cop/naming/variable_number.rb +98 -8
  58. data/lib/rubocop/cop/style/and_or.rb +1 -3
  59. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -4
  60. data/lib/rubocop/cop/style/case_like_if.rb +0 -4
  61. data/lib/rubocop/cop/style/collection_compact.rb +91 -0
  62. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +107 -5
  63. data/lib/rubocop/cop/style/documentation.rb +12 -1
  64. data/lib/rubocop/cop/style/double_negation.rb +6 -1
  65. data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
  66. data/lib/rubocop/cop/style/identical_conditional_branches.rb +7 -2
  67. data/lib/rubocop/cop/style/if_inside_else.rb +37 -1
  68. data/lib/rubocop/cop/style/if_unless_modifier.rb +7 -3
  69. data/lib/rubocop/cop/style/infinite_loop.rb +4 -0
  70. data/lib/rubocop/cop/style/keyword_parameters_order.rb +12 -0
  71. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +2 -2
  72. data/lib/rubocop/cop/style/mixin_grouping.rb +0 -4
  73. data/lib/rubocop/cop/style/multiple_comparison.rb +3 -2
  74. data/lib/rubocop/cop/style/negated_if_else_condition.rb +106 -0
  75. data/lib/rubocop/cop/style/nil_lambda.rb +52 -0
  76. data/lib/rubocop/cop/style/raise_args.rb +21 -6
  77. data/lib/rubocop/cop/style/redundant_argument.rb +73 -0
  78. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
  79. data/lib/rubocop/cop/style/static_class.rb +97 -0
  80. data/lib/rubocop/cop/style/while_until_modifier.rb +9 -0
  81. data/lib/rubocop/cop/util.rb +5 -1
  82. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  83. data/lib/rubocop/cop/variable_force/scope.rb +1 -1
  84. data/lib/rubocop/ext/regexp_node.rb +10 -5
  85. data/lib/rubocop/ext/regexp_parser.rb +9 -2
  86. data/lib/rubocop/formatter/disabled_config_formatter.rb +21 -6
  87. data/lib/rubocop/formatter/formatter_set.rb +1 -0
  88. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +47 -0
  89. data/lib/rubocop/options.rb +7 -0
  90. data/lib/rubocop/rake_task.rb +2 -2
  91. data/lib/rubocop/runner.rb +1 -1
  92. data/lib/rubocop/target_finder.rb +1 -1
  93. data/lib/rubocop/target_ruby.rb +65 -1
  94. data/lib/rubocop/version.rb +1 -1
  95. metadata +14 -8
  96. data/bin/console +0 -10
  97. data/bin/rubocop-profile +0 -32
  98. data/bin/setup +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da2c7f3fe5f1a109fce4e8e9e44efd9e438c45c0c0036f79f3d0156a4dacc452
4
- data.tar.gz: ff29fbdedc13116e5fdbcb95dc3af4a81379794f9d36596983f69a09d69ac575
3
+ metadata.gz: 559e608f152814f5300bb7abd0b4c3e094ae53149f9f99a4cef8c4b6dd0da2ab
4
+ data.tar.gz: fbee2cd4b7cf20eca1eeec13f67b43b32483a0c8b11c17829f705c9c529446f0
5
5
  SHA512:
6
- metadata.gz: 11f024ff53e3eb551b31b02c3a48ab250941c9fd0e642c3bb518a8d635bee89f0fc61dba12e0a66ac40c4536bf368690ade37ce3a6014531ad97ebc0fd9d82f8
7
- data.tar.gz: e567372e804699a2499b6475cdeb4e86906c5fe8eda16428d292a600648d2afe2d34bacea2443fe52229ce4539b5a09b17f387586fc3a9e2d3034d3718ce4bb3
6
+ metadata.gz: b9dd79f49f7bca665d5e9d05cc6e41a6ba5cdff9f4392b9ed5d8a25ec714966b661d8bfef677087cbd4b3ec29c55afb3dbe08e00ffbd7df34385f1ca60ec1312
7
+ data.tar.gz: e36d6e3f839d586fd2776767eb4eff2228c5378f90a56726497b5cc37b1b890f1da33d0c76b47cbfdb3e141debb5eeaee63f41914d03cbd2d2cd819361f5301e
data/README.md CHANGED
@@ -11,11 +11,6 @@
11
11
  [![Maintainability](https://api.codeclimate.com/v1/badges/d2d67f728e88ea84ac69/maintainability)](https://codeclimate.com/github/rubocop-hq/rubocop/maintainability)
12
12
  [![SemVer](https://api.dependabot.com/badges/compatibility_score?dependency-name=rubocop&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score.html?dependency-name=rubocop&package-manager=bundler&version-scheme=semver)
13
13
 
14
- [![Patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://www.patreon.com/bbatsov)
15
- [![OpenCollective](https://opencollective.com/rubocop/backers/badge.svg)](#open-collective-backers)
16
- [![OpenCollective](https://opencollective.com/rubocop/sponsors/badge.svg)](#open-collective-sponsors)
17
- [![Tidelift](https://tidelift.com/badges/package/rubygems/rubocop)](https://tidelift.com/subscription/pkg/rubygems-rubocop?utm_source=rubygems-rubocop&utm_medium=referral&utm_campaign=readme)
18
-
19
14
  > Role models are important. <br/>
20
15
  > -- Officer Alex J. Murphy / RoboCop
21
16
 
@@ -27,6 +22,12 @@ RuboCop can also automatically fix many of them for you.
27
22
  RuboCop is extremely flexible and most aspects of its behavior can be tweaked via various
28
23
  [configuration options](https://github.com/rubocop-hq/rubocop/blob/master/config/default.yml).
29
24
 
25
+ ----------
26
+ [![Patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://www.patreon.com/bbatsov)
27
+ [![OpenCollective](https://opencollective.com/rubocop/backers/badge.svg)](#open-collective-backers)
28
+ [![OpenCollective](https://opencollective.com/rubocop/sponsors/badge.svg)](#open-collective-sponsors)
29
+ [![Tidelift](https://tidelift.com/badges/package/rubygems/rubocop)](https://tidelift.com/subscription/pkg/rubygems-rubocop?utm_source=rubygems-rubocop&utm_medium=referral&utm_campaign=readme)
30
+
30
31
  **Please consider [financially supporting its ongoing development](#funding).**
31
32
 
32
33
  ## Installation
@@ -50,7 +51,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
50
51
  in your `Gemfile`:
51
52
 
52
53
  ```rb
53
- gem 'rubocop', '~> 1.1', require: false
54
+ gem 'rubocop', '~> 1.4', require: false
54
55
  ```
55
56
 
56
57
  See [versioning](https://docs.rubocop.org/rubocop/1.0/versioning.html) for further details.
@@ -70,12 +71,12 @@ You can read a lot more about RuboCop in its [official docs](https://docs.ruboco
70
71
 
71
72
  ## Compatibility
72
73
 
73
- RuboCop supports the following Ruby implementations:
74
+ RuboCop officially supports the following Ruby implementations:
74
75
 
75
76
  * MRI 2.4+
76
77
  * JRuby 9.2+
77
78
 
78
- See [compatibility](https://docs.rubocop.org/rubocop/compatibility.html) for further details.
79
+ See the [compatibility documentation](https://docs.rubocop.org/rubocop/compatibility.html) for further details.
79
80
 
80
81
  ## Readme Badge
81
82
 
@@ -85,6 +86,15 @@ If you use RuboCop in your project, you can include one of these badges in your
85
86
 
86
87
  [![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide)
87
88
 
89
+
90
+ Here are the Markdown snippets for the two badges:
91
+
92
+ ``` markdown
93
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop-hq/rubocop)
94
+
95
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide)
96
+ ```
97
+
88
98
  ## Team
89
99
 
90
100
  Here's a list of RuboCop's core developers:
@@ -100,6 +110,8 @@ Here's a list of RuboCop's core developers:
100
110
  * [Benjamin Quorning](https://github.com/bquorning)
101
111
  * [Marc-André Lafortune](https://github.com/marcandre)
102
112
 
113
+ See the [team page](https://docs.rubocop.org/rubocop/about/team.html) for more details.
114
+
103
115
  ## Logo
104
116
 
105
117
  RuboCop's logo was created by [Dimiter Petrov](https://www.chadomoto.com/). You can find the logo in various
@@ -139,14 +151,19 @@ wide array of funding channels to account for your preferences
139
151
  currently [Open Collective](https://opencollective.com/rubocop) is our
140
152
  preferred funding platform).
141
153
 
142
- If you're working in a company that's making significant use of RuboCop we'd appreciate it if you suggest to your company
143
- to become a RuboCop sponsor.
154
+ **If you're working in a company that's making significant use of RuboCop we'd appreciate it if you suggest to your company
155
+ to become a RuboCop sponsor.**
144
156
 
145
157
  You can support the development of RuboCop via
146
158
  [GitHub Sponsors](https://github.com/sponsors/bbatsov),
147
159
  [Patreon](https://www.patreon.com/bbatsov),
148
- [PayPal](https://paypal.me/bbatsov)
149
- and [Open Collective](https://opencollective.com/rubocop).
160
+ [PayPal](https://paypal.me/bbatsov),
161
+ [Open Collective](https://opencollective.com/rubocop)
162
+ and [Tidelift](https://tidelift.com/subscription/pkg/rubygems-rubocop?utm_source=rubygems-rubocop&utm_medium=referral&utm_campaign=readme)
163
+ .
164
+
165
+ **Note:** If doing a sponsorship in the form of donation is problematic for your company from an accounting standpoint, we'd recommend
166
+ the use of Tidelift, where you can get a support-like subscription instead.
150
167
 
151
168
  ### Open Collective Backers
152
169
 
@@ -463,6 +463,10 @@ Layout/EmptyLineBetweenDefs:
463
463
  StyleGuide: '#empty-lines-between-methods'
464
464
  Enabled: true
465
465
  VersionAdded: '0.49'
466
+ VersionChanged: '1.4'
467
+ EmptyLineBetweenMethodDefs: true
468
+ EmptyLineBetweenClassDefs: true
469
+ EmptyLineBetweenModuleDefs: true
466
470
  # If `true`, this parameter means that single line method definitions don't
467
471
  # need an empty line between them.
468
472
  AllowAdjacentOneLineDefs: false
@@ -891,8 +895,8 @@ Layout/LineLength:
891
895
  StyleGuide: '#max-line-length'
892
896
  Enabled: true
893
897
  VersionAdded: '0.25'
894
- VersionChanged: '0.84'
895
- AutoCorrect: false
898
+ VersionChanged: '1.4'
899
+ AutoCorrect: true
896
900
  Max: 120
897
901
  # To make it possible to copy or click on URIs in the code, we allow lines
898
902
  # containing a URI to be longer than Max.
@@ -1176,7 +1180,7 @@ Layout/SpaceBeforeBlockBraces:
1176
1180
  SupportedStylesForEmptyBraces:
1177
1181
  - space
1178
1182
  - no_space
1179
- VersionChanged: '0.52.1'
1183
+ VersionChanged: '0.52'
1180
1184
 
1181
1185
  Layout/SpaceBeforeComma:
1182
1186
  Description: 'No spaces before commas.'
@@ -1400,6 +1404,11 @@ Lint/ConstantDefinitionInBlock:
1400
1404
  StyleGuide: '#no-constant-definition-in-block'
1401
1405
  Enabled: true
1402
1406
  VersionAdded: '0.91'
1407
+ VersionChanged: '1.3'
1408
+ # `enums` for Typed Enums via T::Enum in Sorbet.
1409
+ # https://sorbet.org/docs/tenum
1410
+ AllowedMethods:
1411
+ - enums
1403
1412
 
1404
1413
  Lint/ConstantResolution:
1405
1414
  Description: 'Check that constants are fully qualified with `::`.'
@@ -1415,6 +1424,22 @@ Lint/Debugger:
1415
1424
  Enabled: true
1416
1425
  VersionAdded: '0.14'
1417
1426
  VersionChanged: '0.49'
1427
+ DebuggerReceivers:
1428
+ - binding
1429
+ - Kernel
1430
+ - Pry
1431
+ DebuggerMethods:
1432
+ - debugger
1433
+ - byebug
1434
+ - remote_byebug
1435
+ - pry
1436
+ - remote_pry
1437
+ - pry_remote
1438
+ - console
1439
+ - rescue
1440
+ - save_and_open_page
1441
+ - save_and_open_screenshot
1442
+ - irb
1418
1443
 
1419
1444
  Lint/DeprecatedClassMethods:
1420
1445
  Description: 'Check for deprecated class method calls.'
@@ -1433,6 +1458,11 @@ Lint/DisjunctiveAssignmentInConstructor:
1433
1458
  VersionAdded: '0.62'
1434
1459
  VersionChanged: '0.88'
1435
1460
 
1461
+ Lint/DuplicateBranch:
1462
+ Description: Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs.
1463
+ Enabled: pending
1464
+ VersionAdded: '1.3'
1465
+
1436
1466
  Lint/DuplicateCaseCondition:
1437
1467
  Description: 'Do not repeat values in case conditionals.'
1438
1468
  Enabled: true
@@ -1478,12 +1508,21 @@ Lint/ElseLayout:
1478
1508
  Description: 'Check for odd code arrangement in an else block.'
1479
1509
  Enabled: true
1480
1510
  VersionAdded: '0.17'
1511
+ VersionChanged: '1.2'
1481
1512
 
1482
1513
  Lint/EmptyBlock:
1483
1514
  Description: 'This cop checks for blocks without a body.'
1484
1515
  Enabled: pending
1485
1516
  VersionAdded: '1.1'
1517
+ VersionChanged: '1.3'
1486
1518
  AllowComments: true
1519
+ AllowEmptyLambdas: true
1520
+
1521
+ Lint/EmptyClass:
1522
+ Description: 'Checks for classes and metaclasses without a body.'
1523
+ Enabled: pending
1524
+ VersionAdded: '1.3'
1525
+ AllowComments: false
1487
1526
 
1488
1527
  Lint/EmptyConditionalBody:
1489
1528
  Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
@@ -1627,7 +1666,8 @@ Lint/Loop:
1627
1666
  StyleGuide: '#loop-with-break'
1628
1667
  Enabled: true
1629
1668
  VersionAdded: '0.9'
1630
- VersionChanged: '0.89'
1669
+ VersionChanged: '1.3'
1670
+ Safe: false
1631
1671
 
1632
1672
  Lint/MissingCopEnableDirective:
1633
1673
  Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
@@ -1648,6 +1688,7 @@ Lint/MissingSuper:
1648
1688
  without calls to `super`'.
1649
1689
  Enabled: true
1650
1690
  VersionAdded: '0.89'
1691
+ VersionChanged: '1.4'
1651
1692
 
1652
1693
  Lint/MixedRegexpCaptureTypes:
1653
1694
  Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
@@ -1679,6 +1720,11 @@ Lint/NextWithoutAccumulator:
1679
1720
  Enabled: true
1680
1721
  VersionAdded: '0.36'
1681
1722
 
1723
+ Lint/NoReturnInBeginEndBlocks:
1724
+ Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.'
1725
+ Enabled: pending
1726
+ VersionAdded: '1.2'
1727
+
1682
1728
  Lint/NonDeterministicRequireOrder:
1683
1729
  Description: 'Always sort arrays returned by Dir.glob when requiring files.'
1684
1730
  Enabled: true
@@ -1824,7 +1870,7 @@ Lint/RescueException:
1824
1870
  StyleGuide: '#no-blind-rescues'
1825
1871
  Enabled: true
1826
1872
  VersionAdded: '0.9'
1827
- VersionChanged: '0.27.1'
1873
+ VersionChanged: '0.27'
1828
1874
 
1829
1875
  Lint/RescueType:
1830
1876
  Description: 'Avoid rescuing from non constants that could result in a `TypeError`.'
@@ -2036,8 +2082,9 @@ Lint/UselessMethodDefinition:
2036
2082
  Lint/UselessSetterCall:
2037
2083
  Description: 'Checks for useless setter call to a local variable.'
2038
2084
  Enabled: true
2085
+ SafeAutoCorrect: false
2039
2086
  VersionAdded: '0.13'
2040
- VersionChanged: '0.80'
2087
+ VersionChanged: '1.2'
2041
2088
  Safe: false
2042
2089
 
2043
2090
  Lint/UselessTimes:
@@ -2181,6 +2228,7 @@ Naming/BinaryOperatorParameterName:
2181
2228
  StyleGuide: '#other-arg'
2182
2229
  Enabled: true
2183
2230
  VersionAdded: '0.50'
2231
+ VersionChanged: '1.2'
2184
2232
 
2185
2233
  Naming/BlockParameterName:
2186
2234
  Description: >-
@@ -2287,6 +2335,7 @@ Naming/HeredocDelimiterCase:
2287
2335
  StyleGuide: '#heredoc-delimiters'
2288
2336
  Enabled: true
2289
2337
  VersionAdded: '0.50'
2338
+ VersionChanged: '1.2'
2290
2339
  EnforcedStyle: uppercase
2291
2340
  SupportedStyles:
2292
2341
  - lowercase
@@ -2305,7 +2354,7 @@ Naming/MemoizedInstanceVariableName:
2305
2354
  Memoized method name should match memo instance variable name.
2306
2355
  Enabled: true
2307
2356
  VersionAdded: '0.53'
2308
- VersionChanged: '0.58'
2357
+ VersionChanged: '1.2'
2309
2358
  EnforcedStyleForLeadingUnderscores: disallowed
2310
2359
  SupportedStylesForLeadingUnderscores:
2311
2360
  - disallowed
@@ -2403,14 +2452,19 @@ Naming/VariableName:
2403
2452
  - camelCase
2404
2453
 
2405
2454
  Naming/VariableNumber:
2406
- Description: 'Use the configured style when numbering variables.'
2455
+ Description: 'Use the configured style when numbering symbols, methods and variables.'
2456
+ StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
2407
2457
  Enabled: true
2408
2458
  VersionAdded: '0.50'
2459
+ VersionChanged: '1.3'
2409
2460
  EnforcedStyle: normalcase
2410
2461
  SupportedStyles:
2411
2462
  - snake_case
2412
2463
  - normalcase
2413
2464
  - non_integer
2465
+ CheckMethodNames: true
2466
+ CheckSymbols: true
2467
+ AllowedIdentifiers: []
2414
2468
 
2415
2469
  #################### Security ##############################
2416
2470
 
@@ -2789,6 +2843,13 @@ Style/ClassVars:
2789
2843
  Enabled: true
2790
2844
  VersionAdded: '0.13'
2791
2845
 
2846
+ Style/CollectionCompact:
2847
+ Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.'
2848
+ Enabled: pending
2849
+ Safe: false
2850
+ VersionAdded: '1.2'
2851
+ VersionChanged: '1.3'
2852
+
2792
2853
  # Align with the style guide.
2793
2854
  Style/CollectionMethods:
2794
2855
  Description: 'Preferred collection methods.'
@@ -2852,17 +2913,18 @@ Style/CommandLiteral:
2852
2913
  Style/CommentAnnotation:
2853
2914
  Description: >-
2854
2915
  Checks formatting of special comments
2855
- (TODO, FIXME, OPTIMIZE, HACK, REVIEW).
2916
+ (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE).
2856
2917
  StyleGuide: '#annotate-keywords'
2857
2918
  Enabled: true
2858
2919
  VersionAdded: '0.10'
2859
- VersionChanged: '0.31'
2920
+ VersionChanged: '1.3'
2860
2921
  Keywords:
2861
2922
  - TODO
2862
2923
  - FIXME
2863
2924
  - OPTIMIZE
2864
2925
  - HACK
2865
2926
  - REVIEW
2927
+ - NOTE
2866
2928
 
2867
2929
  Style/CommentedKeyword:
2868
2930
  Description: 'Do not place comments on the same line as certain keywords.'
@@ -2958,6 +3020,7 @@ Style/DocumentDynamicEvalDefinition:
2958
3020
  StyleGuide: '#eval-comment-docs'
2959
3021
  Enabled: pending
2960
3022
  VersionAdded: '1.1'
3023
+ VersionChanged: '1.3'
2961
3024
 
2962
3025
  Style/Documentation:
2963
3026
  Description: 'Document classes and non-namespace modules.'
@@ -2986,7 +3049,7 @@ Style/DoubleNegation:
2986
3049
  StyleGuide: '#no-bang-bang'
2987
3050
  Enabled: true
2988
3051
  VersionAdded: '0.19'
2989
- VersionChanged: '0.84'
3052
+ VersionChanged: '1.2'
2990
3053
  EnforcedStyle: allowed_in_returns
2991
3054
  SafeAutoCorrect: false
2992
3055
  SupportedStyles:
@@ -3285,6 +3348,7 @@ Style/IfInsideElse:
3285
3348
  Enabled: true
3286
3349
  AllowIfModifier: false
3287
3350
  VersionAdded: '0.36'
3351
+ VersionChanged: '1.3'
3288
3352
 
3289
3353
  Style/IfUnlessModifier:
3290
3354
  Description: >-
@@ -3317,12 +3381,14 @@ Style/ImplicitRuntimeError:
3317
3381
  VersionAdded: '0.41'
3318
3382
 
3319
3383
  Style/InfiniteLoop:
3320
- Description: 'Use Kernel#loop for infinite loops.'
3384
+ Description: >-
3385
+ Use Kernel#loop for infinite loops.
3386
+ This cop is unsafe in the body may raise a `StopIteration` exception.
3387
+ Safe: false
3321
3388
  StyleGuide: '#infinite-loop'
3322
3389
  Enabled: true
3323
3390
  VersionAdded: '0.26'
3324
3391
  VersionChanged: '0.61'
3325
- SafeAutoCorrect: true
3326
3392
 
3327
3393
  Style/InlineComment:
3328
3394
  Description: 'Avoid trailing inline comments.'
@@ -3611,6 +3677,13 @@ Style/NegatedIf:
3611
3677
  - prefix
3612
3678
  - postfix
3613
3679
 
3680
+ Style/NegatedIfElseCondition:
3681
+ Description: >-
3682
+ This cop checks for uses of `if-else` and ternary operators with a negated condition
3683
+ which can be simplified by inverting condition and swapping branches.
3684
+ Enabled: pending
3685
+ VersionAdded: '1.2'
3686
+
3614
3687
  Style/NegatedUnless:
3615
3688
  Description: 'Favor if over unless for negative conditions.'
3616
3689
  StyleGuide: '#if-for-negatives'
@@ -3698,6 +3771,11 @@ Style/NilComparison:
3698
3771
  - predicate
3699
3772
  - comparison
3700
3773
 
3774
+ Style/NilLambda:
3775
+ Description: 'Prefer `-> {}` to `-> { nil }`.'
3776
+ Enabled: pending
3777
+ VersionAdded: '1.3'
3778
+
3701
3779
  Style/NonNilCheck:
3702
3780
  Description: 'Checks for redundant nil checks.'
3703
3781
  StyleGuide: '#no-non-nil-checks'
@@ -3847,7 +3925,7 @@ Style/PercentLiteralDelimiters:
3847
3925
  '%r': '{}'
3848
3926
  '%w': '[]'
3849
3927
  '%W': '[]'
3850
- VersionChanged: '0.48.1'
3928
+ VersionChanged: '0.48'
3851
3929
 
3852
3930
  Style/PercentQLiterals:
3853
3931
  Description: 'Checks if uses of %Q/%q match the configured preference.'
@@ -3888,11 +3966,12 @@ Style/RaiseArgs:
3888
3966
  StyleGuide: '#exception-class-messages'
3889
3967
  Enabled: true
3890
3968
  VersionAdded: '0.14'
3891
- VersionChanged: '0.40'
3969
+ VersionChanged: '1.2'
3892
3970
  EnforcedStyle: exploded
3893
3971
  SupportedStyles:
3894
3972
  - compact # raise Exception.new(msg)
3895
3973
  - exploded # raise Exception, msg
3974
+ AllowedCompactTypes: []
3896
3975
 
3897
3976
  Style/RandomWithOffset:
3898
3977
  Description: >-
@@ -3902,6 +3981,17 @@ Style/RandomWithOffset:
3902
3981
  Enabled: true
3903
3982
  VersionAdded: '0.52'
3904
3983
 
3984
+ Style/RedundantArgument:
3985
+ Description: 'Check for a redundant argument passed to certain methods.'
3986
+ Enabled: pending
3987
+ Safe: false
3988
+ VersionAdded: '1.4'
3989
+ Methods:
3990
+ # Array#join
3991
+ join: ''
3992
+ # String#split
3993
+ split: ' '
3994
+
3905
3995
  Style/RedundantAssignment:
3906
3996
  Description: 'Checks for redundant assignment before returning.'
3907
3997
  Enabled: true
@@ -4196,6 +4286,13 @@ Style/StabbyLambdaParentheses:
4196
4286
  - require_parentheses
4197
4287
  - require_no_parentheses
4198
4288
 
4289
+ Style/StaticClass:
4290
+ Description: 'Prefer modules to classes with only class methods.'
4291
+ StyleGuide: '#modules-vs-classes'
4292
+ Enabled: false
4293
+ Safe: false
4294
+ VersionAdded: '1.3'
4295
+
4199
4296
  Style/StderrPuts:
4200
4297
  Description: 'Use `warn` instead of `$stderr.puts`.'
4201
4298
  StyleGuide: '#warn'
@@ -4246,7 +4343,7 @@ Style/StringMethods:
4246
4343
  Description: 'Checks if configured preferred methods are used over non-preferred.'
4247
4344
  Enabled: false
4248
4345
  VersionAdded: '0.34'
4249
- VersionChanged: '0.34.2'
4346
+ VersionChanged: '0.34'
4250
4347
  # Mapping from undesired method to desired_method
4251
4348
  # e.g. to use `to_sym` over `intern`:
4252
4349
  #