rubocop 1.0.0 → 1.4.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.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -16
  3. data/config/default.yml +165 -19
  4. data/exe/rubocop +1 -1
  5. data/lib/rubocop.rb +17 -0
  6. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
  7. data/lib/rubocop/cli/command/execute_runner.rb +26 -11
  8. data/lib/rubocop/comment_config.rb +1 -1
  9. data/lib/rubocop/config_loader.rb +14 -5
  10. data/lib/rubocop/config_regeneration.rb +1 -1
  11. data/lib/rubocop/cop/bundler/duplicated_gem.rb +26 -6
  12. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
  13. data/lib/rubocop/cop/commissioner.rb +10 -10
  14. data/lib/rubocop/cop/corrector.rb +3 -1
  15. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  16. data/lib/rubocop/cop/force.rb +1 -1
  17. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -3
  18. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +4 -5
  19. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  20. data/lib/rubocop/cop/generator.rb +2 -9
  21. data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
  22. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -1
  23. data/lib/rubocop/cop/layout/block_alignment.rb +3 -4
  24. data/lib/rubocop/cop/layout/class_structure.rb +15 -3
  25. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  26. data/lib/rubocop/cop/layout/else_alignment.rb +15 -2
  27. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +77 -7
  28. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  29. data/lib/rubocop/cop/layout/end_alignment.rb +3 -3
  30. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -2
  31. data/lib/rubocop/cop/layout/hash_alignment.rb +4 -4
  32. data/lib/rubocop/cop/layout/line_length.rb +8 -1
  33. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +24 -18
  34. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -1
  35. data/lib/rubocop/cop/layout/space_inside_parens.rb +35 -13
  36. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  37. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +2 -1
  38. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +26 -2
  39. data/lib/rubocop/cop/lint/debugger.rb +17 -28
  40. data/lib/rubocop/cop/lint/duplicate_branch.rb +93 -0
  41. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +2 -12
  42. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +77 -0
  43. data/lib/rubocop/cop/lint/else_layout.rb +29 -3
  44. data/lib/rubocop/cop/lint/empty_block.rb +82 -0
  45. data/lib/rubocop/cop/lint/empty_class.rb +93 -0
  46. data/lib/rubocop/cop/lint/flip_flop.rb +8 -2
  47. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +39 -7
  48. data/lib/rubocop/cop/lint/loop.rb +4 -4
  49. data/lib/rubocop/cop/lint/missing_super.rb +7 -4
  50. data/lib/rubocop/cop/lint/nested_percent_literal.rb +14 -0
  51. data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +58 -0
  52. data/lib/rubocop/cop/lint/number_conversion.rb +46 -13
  53. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +27 -8
  54. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +19 -16
  55. data/lib/rubocop/cop/lint/shadowed_exception.rb +4 -5
  56. data/lib/rubocop/cop/lint/to_enum_arguments.rb +86 -0
  57. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +194 -0
  58. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
  59. data/lib/rubocop/cop/lint/useless_method_definition.rb +2 -4
  60. data/lib/rubocop/cop/lint/useless_setter_call.rb +6 -1
  61. data/lib/rubocop/cop/metrics/method_length.rb +1 -1
  62. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  63. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
  64. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
  65. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
  66. data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -4
  67. data/lib/rubocop/cop/mixin/visibility_help.rb +1 -3
  68. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +11 -1
  69. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +11 -5
  70. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +67 -18
  71. data/lib/rubocop/cop/naming/predicate_name.rb +2 -1
  72. data/lib/rubocop/cop/naming/variable_number.rb +98 -8
  73. data/lib/rubocop/cop/offense.rb +3 -3
  74. data/lib/rubocop/cop/style/and_or.rb +1 -3
  75. data/lib/rubocop/cop/style/arguments_forwarding.rb +142 -0
  76. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -4
  77. data/lib/rubocop/cop/style/case_like_if.rb +0 -4
  78. data/lib/rubocop/cop/style/collection_compact.rb +91 -0
  79. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +169 -0
  80. data/lib/rubocop/cop/style/documentation.rb +12 -1
  81. data/lib/rubocop/cop/style/double_negation.rb +6 -1
  82. data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
  83. data/lib/rubocop/cop/style/identical_conditional_branches.rb +7 -2
  84. data/lib/rubocop/cop/style/if_inside_else.rb +37 -1
  85. data/lib/rubocop/cop/style/if_unless_modifier.rb +7 -3
  86. data/lib/rubocop/cop/style/infinite_loop.rb +4 -0
  87. data/lib/rubocop/cop/style/keyword_parameters_order.rb +12 -0
  88. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +2 -2
  89. data/lib/rubocop/cop/style/mixin_grouping.rb +0 -4
  90. data/lib/rubocop/cop/style/multiple_comparison.rb +55 -7
  91. data/lib/rubocop/cop/style/negated_if_else_condition.rb +106 -0
  92. data/lib/rubocop/cop/style/nil_lambda.rb +52 -0
  93. data/lib/rubocop/cop/style/raise_args.rb +21 -6
  94. data/lib/rubocop/cop/style/redundant_argument.rb +73 -0
  95. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +7 -1
  96. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
  97. data/lib/rubocop/cop/style/semicolon.rb +3 -0
  98. data/lib/rubocop/cop/style/static_class.rb +97 -0
  99. data/lib/rubocop/cop/style/swap_values.rb +108 -0
  100. data/lib/rubocop/cop/style/while_until_modifier.rb +9 -0
  101. data/lib/rubocop/cop/team.rb +6 -1
  102. data/lib/rubocop/cop/util.rb +6 -2
  103. data/lib/rubocop/cop/variable_force/branch.rb +1 -1
  104. data/lib/rubocop/cop/variable_force/scope.rb +1 -1
  105. data/lib/rubocop/ext/regexp_node.rb +17 -9
  106. data/lib/rubocop/ext/regexp_parser.rb +84 -0
  107. data/lib/rubocop/formatter/disabled_config_formatter.rb +21 -6
  108. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  109. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +47 -0
  110. data/lib/rubocop/magic_comment.rb +2 -2
  111. data/lib/rubocop/options.rb +7 -0
  112. data/lib/rubocop/rake_task.rb +2 -2
  113. data/lib/rubocop/rspec/shared_contexts.rb +4 -0
  114. data/lib/rubocop/runner.rb +1 -1
  115. data/lib/rubocop/target_finder.rb +1 -1
  116. data/lib/rubocop/target_ruby.rb +65 -1
  117. data/lib/rubocop/version.rb +1 -1
  118. metadata +22 -10
  119. data/assets/logo.png +0 -0
  120. data/assets/output.html.erb +0 -261
  121. data/bin/console +0 -10
  122. data/bin/rubocop-profile +0 -32
  123. data/bin/setup +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c25c996f99dbf63d4ffad0041dd929fc0f3d11b5bd2abd5d0aea1ac97cd57afb
4
- data.tar.gz: 462f0dcd3120a9911fe100c7fb2d02a6919cf81078e871c7896044ebd5e25358
3
+ metadata.gz: 840dbd224c26defdcf3fe6d5c48f6e495f4288141a38f5e79de74552a0a1d9d8
4
+ data.tar.gz: 381215eaceb9e62bdb1ba0df04880b4b8c702bfd4e11df78d0683b539451fb3c
5
5
  SHA512:
6
- metadata.gz: e3f9afb1fc30fef47c2d3eb64d33f237ca21adcfaf81c64aa24a47eaca9bee840123e29bd07be63e88137544d2e5cf00c4b63110dddfa1f306e0b95a1bc02d45
7
- data.tar.gz: b0b79a254b907beb97ea89c3e330ca0ed8ed9ad7c3e5e51848ad5dfe77f98aa0a3097dcdab06c8eb82d6981d6354fbbd81b4e43a49b2b3d5f1b7be9cc4dc614a
6
+ metadata.gz: d3a563aeb426e7ae74dcc9dbc28d153e3b672d0abcae22bea62ff6077bb2bb7eff78cdacf3f4f9a384d09ddc417744135c3a47536145052bbbca985008514b5e
7
+ data.tar.gz: 0c832cf607fa6fe0bd5513dc82f315638285f225c7456a2a884830cd173bb740ca741b4ea2279e908b8a00ecb94e60f40c7b2064841efa2152f50ce6a40477a2
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
@@ -43,15 +44,18 @@ If you'd rather install RuboCop using `bundler`, add a line for it in your `Gemf
43
44
  gem 'rubocop', require: false
44
45
  ```
45
46
 
46
- RuboCop's development is moving at a very rapid pace and there are
47
- often backward-incompatible changes between minor releases (since we
48
- haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
49
- might want to use a conservative version lock in your `Gemfile`:
47
+ RuboCop is stable between major versions, both in terms of API and cop configuration.
48
+ We aim the ease the maintenance of RuboCop extensions and the upgrades between RuboCop
49
+ releases. All big changes are reserved for major releases.
50
+ To prevent an unwanted RuboCop update you might want to use a conservative version lock
51
+ in your `Gemfile`:
50
52
 
51
53
  ```rb
52
- gem 'rubocop', '~> 1.0.0', require: false
54
+ gem 'rubocop', '~> 1.4', require: false
53
55
  ```
54
56
 
57
+ See [versioning](https://docs.rubocop.org/rubocop/1.0/versioning.html) for further details.
58
+
55
59
  ## Quickstart
56
60
 
57
61
  Just type `rubocop` in a Ruby project's folder and watch the magic happen.
@@ -67,12 +71,12 @@ You can read a lot more about RuboCop in its [official docs](https://docs.ruboco
67
71
 
68
72
  ## Compatibility
69
73
 
70
- RuboCop supports the following Ruby implementations:
74
+ RuboCop officially supports the following Ruby implementations:
71
75
 
72
76
  * MRI 2.4+
73
77
  * JRuby 9.2+
74
78
 
75
- 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.
76
80
 
77
81
  ## Readme Badge
78
82
 
@@ -82,6 +86,15 @@ If you use RuboCop in your project, you can include one of these badges in your
82
86
 
83
87
  [![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide)
84
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
+
85
98
  ## Team
86
99
 
87
100
  Here's a list of RuboCop's core developers:
@@ -97,6 +110,8 @@ Here's a list of RuboCop's core developers:
97
110
  * [Benjamin Quorning](https://github.com/bquorning)
98
111
  * [Marc-André Lafortune](https://github.com/marcandre)
99
112
 
113
+ See the [team page](https://docs.rubocop.org/rubocop/about/team.html) for more details.
114
+
100
115
  ## Logo
101
116
 
102
117
  RuboCop's logo was created by [Dimiter Petrov](https://www.chadomoto.com/). You can find the logo in various
@@ -136,14 +151,19 @@ wide array of funding channels to account for your preferences
136
151
  currently [Open Collective](https://opencollective.com/rubocop) is our
137
152
  preferred funding platform).
138
153
 
139
- If you're working in a company that's making significant use of RuboCop we'd appreciate it if you suggest to your company
140
- 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.**
141
156
 
142
157
  You can support the development of RuboCop via
143
158
  [GitHub Sponsors](https://github.com/sponsors/bbatsov),
144
159
  [Patreon](https://www.patreon.com/bbatsov),
145
- [PayPal](https://paypal.me/bbatsov)
146
- 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.
147
167
 
148
168
  ### Open Collective Backers
149
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.'
@@ -1334,7 +1338,7 @@ Layout/TrailingWhitespace:
1334
1338
  StyleGuide: '#no-trailing-whitespace'
1335
1339
  Enabled: true
1336
1340
  VersionAdded: '0.49'
1337
- VersionChanged: '0.83'
1341
+ VersionChanged: '1.0'
1338
1342
  AllowInHeredoc: false
1339
1343
 
1340
1344
  #################### Lint ##################################
@@ -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
@@ -1454,6 +1484,11 @@ Lint/DuplicateMethods:
1454
1484
  Enabled: true
1455
1485
  VersionAdded: '0.29'
1456
1486
 
1487
+ Lint/DuplicateRegexpCharacterClassElement:
1488
+ Description: 'Checks for duplicate elements in Regexp character classes.'
1489
+ Enabled: pending
1490
+ VersionAdded: '1.1'
1491
+
1457
1492
  Lint/DuplicateRequire:
1458
1493
  Description: 'Check for duplicate `require`s and `require_relative`s.'
1459
1494
  Enabled: true
@@ -1473,6 +1508,21 @@ Lint/ElseLayout:
1473
1508
  Description: 'Check for odd code arrangement in an else block.'
1474
1509
  Enabled: true
1475
1510
  VersionAdded: '0.17'
1511
+ VersionChanged: '1.2'
1512
+
1513
+ Lint/EmptyBlock:
1514
+ Description: 'This cop checks for blocks without a body.'
1515
+ Enabled: pending
1516
+ VersionAdded: '1.1'
1517
+ VersionChanged: '1.3'
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
1476
1526
 
1477
1527
  Lint/EmptyConditionalBody:
1478
1528
  Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
@@ -1616,7 +1666,8 @@ Lint/Loop:
1616
1666
  StyleGuide: '#loop-with-break'
1617
1667
  Enabled: true
1618
1668
  VersionAdded: '0.9'
1619
- VersionChanged: '0.89'
1669
+ VersionChanged: '1.3'
1670
+ Safe: false
1620
1671
 
1621
1672
  Lint/MissingCopEnableDirective:
1622
1673
  Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
@@ -1637,6 +1688,7 @@ Lint/MissingSuper:
1637
1688
  without calls to `super`'.
1638
1689
  Enabled: true
1639
1690
  VersionAdded: '0.89'
1691
+ VersionChanged: '1.4'
1640
1692
 
1641
1693
  Lint/MixedRegexpCaptureTypes:
1642
1694
  Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
@@ -1647,7 +1699,8 @@ Lint/MultipleComparison:
1647
1699
  Description: "Use `&&` operator to compare multiple values."
1648
1700
  Enabled: true
1649
1701
  VersionAdded: '0.47'
1650
- VersionChanged: '0.77'
1702
+ VersionChanged: '1.1'
1703
+ AllowMethodComparison: true
1651
1704
 
1652
1705
  Lint/NestedMethodDefinition:
1653
1706
  Description: 'Do not use nested method definitions.'
@@ -1667,6 +1720,11 @@ Lint/NextWithoutAccumulator:
1667
1720
  Enabled: true
1668
1721
  VersionAdded: '0.36'
1669
1722
 
1723
+ Lint/NoReturnInBeginEndBlocks:
1724
+ Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.'
1725
+ Enabled: pending
1726
+ VersionAdded: '1.2'
1727
+
1670
1728
  Lint/NonDeterministicRequireOrder:
1671
1729
  Description: 'Always sort arrays returned by Dir.glob when requiring files.'
1672
1730
  Enabled: true
@@ -1682,8 +1740,12 @@ Lint/NumberConversion:
1682
1740
  Description: 'Checks unsafe usage of number conversion methods.'
1683
1741
  Enabled: false
1684
1742
  VersionAdded: '0.53'
1685
- VersionChanged: '0.70'
1743
+ VersionChanged: '1.1'
1686
1744
  SafeAutoCorrect: false
1745
+ IgnoredMethods: []
1746
+ IgnoredClasses:
1747
+ - Time
1748
+ - DateTime
1687
1749
 
1688
1750
  Lint/OrderedMagicComments:
1689
1751
  Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
@@ -1808,7 +1870,7 @@ Lint/RescueException:
1808
1870
  StyleGuide: '#no-blind-rescues'
1809
1871
  Enabled: true
1810
1872
  VersionAdded: '0.9'
1811
- VersionChanged: '0.27.1'
1873
+ VersionChanged: '0.27'
1812
1874
 
1813
1875
  Lint/RescueType:
1814
1876
  Description: 'Avoid rescuing from non constants that could result in a `TypeError`.'
@@ -1910,6 +1972,11 @@ Lint/Syntax:
1910
1972
  VersionAdded: '0.9'
1911
1973
 
1912
1974
 
1975
+ Lint/ToEnumArguments:
1976
+ Description: 'This cop ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
1977
+ Enabled: pending
1978
+ VersionAdded: '1.1'
1979
+
1913
1980
  Lint/ToJSON:
1914
1981
  Description: 'Ensure #to_json includes an optional argument.'
1915
1982
  Enabled: true
@@ -1936,6 +2003,11 @@ Lint/UnifiedInteger:
1936
2003
  Enabled: true
1937
2004
  VersionAdded: '0.43'
1938
2005
 
2006
+ Lint/UnmodifiedReduceAccumulator:
2007
+ Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.
2008
+ Enabled: pending
2009
+ VersionAdded: '1.1'
2010
+
1939
2011
  Lint/UnreachableCode:
1940
2012
  Description: 'Unreachable code.'
1941
2013
  Enabled: true
@@ -2010,8 +2082,9 @@ Lint/UselessMethodDefinition:
2010
2082
  Lint/UselessSetterCall:
2011
2083
  Description: 'Checks for useless setter call to a local variable.'
2012
2084
  Enabled: true
2085
+ SafeAutoCorrect: false
2013
2086
  VersionAdded: '0.13'
2014
- VersionChanged: '0.80'
2087
+ VersionChanged: '1.2'
2015
2088
  Safe: false
2016
2089
 
2017
2090
  Lint/UselessTimes:
@@ -2155,6 +2228,7 @@ Naming/BinaryOperatorParameterName:
2155
2228
  StyleGuide: '#other-arg'
2156
2229
  Enabled: true
2157
2230
  VersionAdded: '0.50'
2231
+ VersionChanged: '1.2'
2158
2232
 
2159
2233
  Naming/BlockParameterName:
2160
2234
  Description: >-
@@ -2261,6 +2335,7 @@ Naming/HeredocDelimiterCase:
2261
2335
  StyleGuide: '#heredoc-delimiters'
2262
2336
  Enabled: true
2263
2337
  VersionAdded: '0.50'
2338
+ VersionChanged: '1.2'
2264
2339
  EnforcedStyle: uppercase
2265
2340
  SupportedStyles:
2266
2341
  - lowercase
@@ -2279,7 +2354,7 @@ Naming/MemoizedInstanceVariableName:
2279
2354
  Memoized method name should match memo instance variable name.
2280
2355
  Enabled: true
2281
2356
  VersionAdded: '0.53'
2282
- VersionChanged: '0.58'
2357
+ VersionChanged: '1.2'
2283
2358
  EnforcedStyleForLeadingUnderscores: disallowed
2284
2359
  SupportedStylesForLeadingUnderscores:
2285
2360
  - disallowed
@@ -2377,14 +2452,19 @@ Naming/VariableName:
2377
2452
  - camelCase
2378
2453
 
2379
2454
  Naming/VariableNumber:
2380
- 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'
2381
2457
  Enabled: true
2382
2458
  VersionAdded: '0.50'
2459
+ VersionChanged: '1.3'
2383
2460
  EnforcedStyle: normalcase
2384
2461
  SupportedStyles:
2385
2462
  - snake_case
2386
2463
  - normalcase
2387
2464
  - non_integer
2465
+ CheckMethodNames: true
2466
+ CheckSymbols: true
2467
+ AllowedIdentifiers: []
2388
2468
 
2389
2469
  #################### Security ##############################
2390
2470
 
@@ -2478,6 +2558,13 @@ Style/AndOr:
2478
2558
  - always
2479
2559
  - conditionals
2480
2560
 
2561
+ Style/ArgumentsForwarding:
2562
+ Description: 'Use arguments forwarding.'
2563
+ StyleGuide: '#arguments-forwarding'
2564
+ Enabled: pending
2565
+ AllowOnlyRestArgument: true
2566
+ VersionAdded: '1.1'
2567
+
2481
2568
  Style/ArrayCoercion:
2482
2569
  Description: >-
2483
2570
  Use Array() instead of explicit Array check or [*var], when dealing
@@ -2756,6 +2843,13 @@ Style/ClassVars:
2756
2843
  Enabled: true
2757
2844
  VersionAdded: '0.13'
2758
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
+
2759
2853
  # Align with the style guide.
2760
2854
  Style/CollectionMethods:
2761
2855
  Description: 'Preferred collection methods.'
@@ -2819,17 +2913,18 @@ Style/CommandLiteral:
2819
2913
  Style/CommentAnnotation:
2820
2914
  Description: >-
2821
2915
  Checks formatting of special comments
2822
- (TODO, FIXME, OPTIMIZE, HACK, REVIEW).
2916
+ (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE).
2823
2917
  StyleGuide: '#annotate-keywords'
2824
2918
  Enabled: true
2825
2919
  VersionAdded: '0.10'
2826
- VersionChanged: '0.31'
2920
+ VersionChanged: '1.3'
2827
2921
  Keywords:
2828
2922
  - TODO
2829
2923
  - FIXME
2830
2924
  - OPTIMIZE
2831
2925
  - HACK
2832
2926
  - REVIEW
2927
+ - NOTE
2833
2928
 
2834
2929
  Style/CommentedKeyword:
2835
2930
  Description: 'Do not place comments on the same line as certain keywords.'
@@ -2918,6 +3013,15 @@ Style/DisableCopsWithinSourceCodeDirective:
2918
3013
  Enabled: false
2919
3014
  VersionAdded: '0.82'
2920
3015
 
3016
+ Style/DocumentDynamicEvalDefinition:
3017
+ Description: >-
3018
+ When using `class_eval` (or other `eval`) with string interpolation,
3019
+ add a comment block showing its appearance if interpolated.
3020
+ StyleGuide: '#eval-comment-docs'
3021
+ Enabled: pending
3022
+ VersionAdded: '1.1'
3023
+ VersionChanged: '1.3'
3024
+
2921
3025
  Style/Documentation:
2922
3026
  Description: 'Document classes and non-namespace modules.'
2923
3027
  Enabled: true
@@ -2945,7 +3049,7 @@ Style/DoubleNegation:
2945
3049
  StyleGuide: '#no-bang-bang'
2946
3050
  Enabled: true
2947
3051
  VersionAdded: '0.19'
2948
- VersionChanged: '0.84'
3052
+ VersionChanged: '1.2'
2949
3053
  EnforcedStyle: allowed_in_returns
2950
3054
  SafeAutoCorrect: false
2951
3055
  SupportedStyles:
@@ -3244,6 +3348,7 @@ Style/IfInsideElse:
3244
3348
  Enabled: true
3245
3349
  AllowIfModifier: false
3246
3350
  VersionAdded: '0.36'
3351
+ VersionChanged: '1.3'
3247
3352
 
3248
3353
  Style/IfUnlessModifier:
3249
3354
  Description: >-
@@ -3276,12 +3381,14 @@ Style/ImplicitRuntimeError:
3276
3381
  VersionAdded: '0.41'
3277
3382
 
3278
3383
  Style/InfiniteLoop:
3279
- 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
3280
3388
  StyleGuide: '#infinite-loop'
3281
3389
  Enabled: true
3282
3390
  VersionAdded: '0.26'
3283
3391
  VersionChanged: '0.61'
3284
- SafeAutoCorrect: true
3285
3392
 
3286
3393
  Style/InlineComment:
3287
3394
  Description: 'Avoid trailing inline comments.'
@@ -3535,6 +3642,7 @@ Style/MultipleComparison:
3535
3642
  use Array#include? instead.
3536
3643
  Enabled: true
3537
3644
  VersionAdded: '0.49'
3645
+ VersionChanged: '1.1'
3538
3646
 
3539
3647
  Style/MutableConstant:
3540
3648
  Description: 'Do not assign mutable objects to constants.'
@@ -3569,6 +3677,13 @@ Style/NegatedIf:
3569
3677
  - prefix
3570
3678
  - postfix
3571
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
+
3572
3687
  Style/NegatedUnless:
3573
3688
  Description: 'Favor if over unless for negative conditions.'
3574
3689
  StyleGuide: '#if-for-negatives'
@@ -3656,6 +3771,11 @@ Style/NilComparison:
3656
3771
  - predicate
3657
3772
  - comparison
3658
3773
 
3774
+ Style/NilLambda:
3775
+ Description: 'Prefer `-> {}` to `-> { nil }`.'
3776
+ Enabled: pending
3777
+ VersionAdded: '1.3'
3778
+
3659
3779
  Style/NonNilCheck:
3660
3780
  Description: 'Checks for redundant nil checks.'
3661
3781
  StyleGuide: '#no-non-nil-checks'
@@ -3805,7 +3925,7 @@ Style/PercentLiteralDelimiters:
3805
3925
  '%r': '{}'
3806
3926
  '%w': '[]'
3807
3927
  '%W': '[]'
3808
- VersionChanged: '0.48.1'
3928
+ VersionChanged: '0.48'
3809
3929
 
3810
3930
  Style/PercentQLiterals:
3811
3931
  Description: 'Checks if uses of %Q/%q match the configured preference.'
@@ -3846,11 +3966,12 @@ Style/RaiseArgs:
3846
3966
  StyleGuide: '#exception-class-messages'
3847
3967
  Enabled: true
3848
3968
  VersionAdded: '0.14'
3849
- VersionChanged: '0.40'
3969
+ VersionChanged: '1.2'
3850
3970
  EnforcedStyle: exploded
3851
3971
  SupportedStyles:
3852
3972
  - compact # raise Exception.new(msg)
3853
3973
  - exploded # raise Exception, msg
3974
+ AllowedCompactTypes: []
3854
3975
 
3855
3976
  Style/RandomWithOffset:
3856
3977
  Description: >-
@@ -3860,6 +3981,17 @@ Style/RandomWithOffset:
3860
3981
  Enabled: true
3861
3982
  VersionAdded: '0.52'
3862
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
+
3863
3995
  Style/RedundantAssignment:
3864
3996
  Description: 'Checks for redundant assignment before returning.'
3865
3997
  Enabled: true
@@ -4154,6 +4286,13 @@ Style/StabbyLambdaParentheses:
4154
4286
  - require_parentheses
4155
4287
  - require_no_parentheses
4156
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
+
4157
4296
  Style/StderrPuts:
4158
4297
  Description: 'Use `warn` instead of `$stderr.puts`.'
4159
4298
  StyleGuide: '#warn'
@@ -4204,7 +4343,7 @@ Style/StringMethods:
4204
4343
  Description: 'Checks if configured preferred methods are used over non-preferred.'
4205
4344
  Enabled: false
4206
4345
  VersionAdded: '0.34'
4207
- VersionChanged: '0.34.2'
4346
+ VersionChanged: '0.34'
4208
4347
  # Mapping from undesired method to desired_method
4209
4348
  # e.g. to use `to_sym` over `intern`:
4210
4349
  #
@@ -4226,6 +4365,13 @@ Style/StructInheritance:
4226
4365
  VersionAdded: '0.29'
4227
4366
  VersionChanged: '0.86'
4228
4367
 
4368
+ Style/SwapValues:
4369
+ Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
4370
+ StyleGuide: '#values-swapping'
4371
+ Enabled: pending
4372
+ VersionAdded: '1.1'
4373
+ SafeAutoCorrect: false
4374
+
4229
4375
  Style/SymbolArray:
4230
4376
  Description: 'Use %i or %I for arrays of symbols.'
4231
4377
  StyleGuide: '#percent-i'