rubocop 1.0.0 → 1.3.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -16
  3. data/config/default.yml +141 -14
  4. data/exe/rubocop +1 -1
  5. data/lib/rubocop.rb +16 -0
  6. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
  7. data/lib/rubocop/comment_config.rb +1 -1
  8. data/lib/rubocop/config_loader.rb +7 -6
  9. data/lib/rubocop/cop/bundler/duplicated_gem.rb +26 -6
  10. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
  11. data/lib/rubocop/cop/commissioner.rb +10 -10
  12. data/lib/rubocop/cop/corrector.rb +3 -1
  13. data/lib/rubocop/cop/force.rb +1 -1
  14. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -3
  15. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +4 -5
  16. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
  17. data/lib/rubocop/cop/generator.rb +1 -1
  18. data/lib/rubocop/cop/layout/block_alignment.rb +3 -4
  19. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  20. data/lib/rubocop/cop/layout/else_alignment.rb +15 -2
  21. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  22. data/lib/rubocop/cop/layout/end_alignment.rb +3 -3
  23. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -2
  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_inside_parens.rb +35 -13
  28. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
  29. data/lib/rubocop/cop/lint/constant_definition_in_block.rb +23 -2
  30. data/lib/rubocop/cop/lint/debugger.rb +17 -28
  31. data/lib/rubocop/cop/lint/duplicate_branch.rb +93 -0
  32. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +2 -12
  33. data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +77 -0
  34. data/lib/rubocop/cop/lint/else_layout.rb +29 -3
  35. data/lib/rubocop/cop/lint/empty_block.rb +82 -0
  36. data/lib/rubocop/cop/lint/empty_class.rb +93 -0
  37. data/lib/rubocop/cop/lint/flip_flop.rb +8 -2
  38. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +38 -6
  39. data/lib/rubocop/cop/lint/loop.rb +4 -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/number_conversion.rb +46 -13
  43. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +27 -8
  44. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +19 -16
  45. data/lib/rubocop/cop/lint/shadowed_exception.rb +4 -5
  46. data/lib/rubocop/cop/lint/to_enum_arguments.rb +95 -0
  47. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +185 -0
  48. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
  49. data/lib/rubocop/cop/lint/useless_method_definition.rb +2 -4
  50. data/lib/rubocop/cop/lint/useless_setter_call.rb +6 -1
  51. data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
  52. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
  53. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
  54. data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -4
  55. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +11 -1
  56. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +11 -5
  57. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +67 -18
  58. data/lib/rubocop/cop/naming/predicate_name.rb +2 -1
  59. data/lib/rubocop/cop/naming/variable_number.rb +98 -8
  60. data/lib/rubocop/cop/offense.rb +3 -3
  61. data/lib/rubocop/cop/style/and_or.rb +1 -3
  62. data/lib/rubocop/cop/style/arguments_forwarding.rb +142 -0
  63. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -4
  64. data/lib/rubocop/cop/style/case_like_if.rb +0 -4
  65. data/lib/rubocop/cop/style/collection_compact.rb +91 -0
  66. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +162 -0
  67. data/lib/rubocop/cop/style/double_negation.rb +6 -1
  68. data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
  69. data/lib/rubocop/cop/style/identical_conditional_branches.rb +7 -2
  70. data/lib/rubocop/cop/style/if_inside_else.rb +37 -1
  71. data/lib/rubocop/cop/style/if_unless_modifier.rb +7 -3
  72. data/lib/rubocop/cop/style/infinite_loop.rb +4 -0
  73. data/lib/rubocop/cop/style/keyword_parameters_order.rb +12 -0
  74. data/lib/rubocop/cop/style/mixin_grouping.rb +0 -4
  75. data/lib/rubocop/cop/style/multiple_comparison.rb +55 -7
  76. data/lib/rubocop/cop/style/negated_if_else_condition.rb +104 -0
  77. data/lib/rubocop/cop/style/nil_lambda.rb +52 -0
  78. data/lib/rubocop/cop/style/raise_args.rb +21 -6
  79. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +7 -1
  80. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
  81. data/lib/rubocop/cop/style/semicolon.rb +3 -0
  82. data/lib/rubocop/cop/style/static_class.rb +97 -0
  83. data/lib/rubocop/cop/style/swap_values.rb +108 -0
  84. data/lib/rubocop/cop/style/while_until_modifier.rb +9 -0
  85. data/lib/rubocop/cop/team.rb +6 -1
  86. data/lib/rubocop/cop/util.rb +5 -1
  87. data/lib/rubocop/ext/regexp_node.rb +17 -9
  88. data/lib/rubocop/ext/regexp_parser.rb +84 -0
  89. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  90. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +47 -0
  91. data/lib/rubocop/magic_comment.rb +2 -2
  92. data/lib/rubocop/options.rb +2 -0
  93. data/lib/rubocop/rspec/shared_contexts.rb +4 -0
  94. data/lib/rubocop/target_ruby.rb +57 -1
  95. data/lib/rubocop/version.rb +1 -1
  96. metadata +21 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c25c996f99dbf63d4ffad0041dd929fc0f3d11b5bd2abd5d0aea1ac97cd57afb
4
- data.tar.gz: 462f0dcd3120a9911fe100c7fb2d02a6919cf81078e871c7896044ebd5e25358
3
+ metadata.gz: 5013f1930869ad961d7fe1cf2cd8bad7a36a15bc37f6cf42e1663fbdb61f2cc2
4
+ data.tar.gz: 1ac4e658406f0f6e22a068f28fab225a8e9f53c59a79f89f0e52157cdc076efc
5
5
  SHA512:
6
- metadata.gz: e3f9afb1fc30fef47c2d3eb64d33f237ca21adcfaf81c64aa24a47eaca9bee840123e29bd07be63e88137544d2e5cf00c4b63110dddfa1f306e0b95a1bc02d45
7
- data.tar.gz: b0b79a254b907beb97ea89c3e330ca0ed8ed9ad7c3e5e51848ad5dfe77f98aa0a3097dcdab06c8eb82d6981d6354fbbd81b4e43a49b2b3d5f1b7be9cc4dc614a
6
+ metadata.gz: 555adab63cf768a150f37d2ca84e08f2322e84182528949e09bd5eda4c79348e4c41dc17d23737785ea044a78f54f99d99d512047446d7437efdeaf306147f32
7
+ data.tar.gz: 3fe186c044fd8733f4edef4055c036106d739e485dbfdcdbffe7882961175695edb79aafe27c1b11a8bbe9791f0754f26e7bd7534571dd09955bd5caf6aa6afe
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.3', 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
 
@@ -891,7 +891,7 @@ Layout/LineLength:
891
891
  StyleGuide: '#max-line-length'
892
892
  Enabled: true
893
893
  VersionAdded: '0.25'
894
- VersionChanged: '0.84'
894
+ VersionChanged: '1.3'
895
895
  AutoCorrect: false
896
896
  Max: 120
897
897
  # To make it possible to copy or click on URIs in the code, we allow lines
@@ -1334,7 +1334,7 @@ Layout/TrailingWhitespace:
1334
1334
  StyleGuide: '#no-trailing-whitespace'
1335
1335
  Enabled: true
1336
1336
  VersionAdded: '0.49'
1337
- VersionChanged: '0.83'
1337
+ VersionChanged: '1.0'
1338
1338
  AllowInHeredoc: false
1339
1339
 
1340
1340
  #################### Lint ##################################
@@ -1400,6 +1400,8 @@ Lint/ConstantDefinitionInBlock:
1400
1400
  StyleGuide: '#no-constant-definition-in-block'
1401
1401
  Enabled: true
1402
1402
  VersionAdded: '0.91'
1403
+ VersionChanged: '1.3'
1404
+ AllowedMethods: []
1403
1405
 
1404
1406
  Lint/ConstantResolution:
1405
1407
  Description: 'Check that constants are fully qualified with `::`.'
@@ -1415,6 +1417,22 @@ Lint/Debugger:
1415
1417
  Enabled: true
1416
1418
  VersionAdded: '0.14'
1417
1419
  VersionChanged: '0.49'
1420
+ DebuggerReceivers:
1421
+ - binding
1422
+ - Kernel
1423
+ - Pry
1424
+ DebuggerMethods:
1425
+ - debugger
1426
+ - byebug
1427
+ - remote_byebug
1428
+ - pry
1429
+ - remote_pry
1430
+ - pry_remote
1431
+ - console
1432
+ - rescue
1433
+ - save_and_open_page
1434
+ - save_and_open_screenshot
1435
+ - irb
1418
1436
 
1419
1437
  Lint/DeprecatedClassMethods:
1420
1438
  Description: 'Check for deprecated class method calls.'
@@ -1433,6 +1451,11 @@ Lint/DisjunctiveAssignmentInConstructor:
1433
1451
  VersionAdded: '0.62'
1434
1452
  VersionChanged: '0.88'
1435
1453
 
1454
+ Lint/DuplicateBranch:
1455
+ Description: Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs.
1456
+ Enabled: pending
1457
+ VersionAdded: '1.3'
1458
+
1436
1459
  Lint/DuplicateCaseCondition:
1437
1460
  Description: 'Do not repeat values in case conditionals.'
1438
1461
  Enabled: true
@@ -1454,6 +1477,11 @@ Lint/DuplicateMethods:
1454
1477
  Enabled: true
1455
1478
  VersionAdded: '0.29'
1456
1479
 
1480
+ Lint/DuplicateRegexpCharacterClassElement:
1481
+ Description: 'Checks for duplicate elements in Regexp character classes.'
1482
+ Enabled: pending
1483
+ VersionAdded: '1.1'
1484
+
1457
1485
  Lint/DuplicateRequire:
1458
1486
  Description: 'Check for duplicate `require`s and `require_relative`s.'
1459
1487
  Enabled: true
@@ -1473,6 +1501,21 @@ Lint/ElseLayout:
1473
1501
  Description: 'Check for odd code arrangement in an else block.'
1474
1502
  Enabled: true
1475
1503
  VersionAdded: '0.17'
1504
+ VersionChanged: '1.2'
1505
+
1506
+ Lint/EmptyBlock:
1507
+ Description: 'This cop checks for blocks without a body.'
1508
+ Enabled: pending
1509
+ VersionAdded: '1.1'
1510
+ VersionChanged: '1.3'
1511
+ AllowComments: true
1512
+ AllowEmptyLambdas: true
1513
+
1514
+ Lint/EmptyClass:
1515
+ Description: 'Checks for classes and metaclasses without a body.'
1516
+ Enabled: pending
1517
+ VersionAdded: '1.3'
1518
+ AllowComments: false
1476
1519
 
1477
1520
  Lint/EmptyConditionalBody:
1478
1521
  Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
@@ -1616,7 +1659,8 @@ Lint/Loop:
1616
1659
  StyleGuide: '#loop-with-break'
1617
1660
  Enabled: true
1618
1661
  VersionAdded: '0.9'
1619
- VersionChanged: '0.89'
1662
+ VersionChanged: '1.3'
1663
+ Safe: false
1620
1664
 
1621
1665
  Lint/MissingCopEnableDirective:
1622
1666
  Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.'
@@ -1647,7 +1691,8 @@ Lint/MultipleComparison:
1647
1691
  Description: "Use `&&` operator to compare multiple values."
1648
1692
  Enabled: true
1649
1693
  VersionAdded: '0.47'
1650
- VersionChanged: '0.77'
1694
+ VersionChanged: '1.1'
1695
+ AllowMethodComparison: true
1651
1696
 
1652
1697
  Lint/NestedMethodDefinition:
1653
1698
  Description: 'Do not use nested method definitions.'
@@ -1667,6 +1712,11 @@ Lint/NextWithoutAccumulator:
1667
1712
  Enabled: true
1668
1713
  VersionAdded: '0.36'
1669
1714
 
1715
+ Lint/NoReturnInBeginEndBlocks:
1716
+ Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.'
1717
+ Enabled: pending
1718
+ VersionAdded: '1.2'
1719
+
1670
1720
  Lint/NonDeterministicRequireOrder:
1671
1721
  Description: 'Always sort arrays returned by Dir.glob when requiring files.'
1672
1722
  Enabled: true
@@ -1682,8 +1732,12 @@ Lint/NumberConversion:
1682
1732
  Description: 'Checks unsafe usage of number conversion methods.'
1683
1733
  Enabled: false
1684
1734
  VersionAdded: '0.53'
1685
- VersionChanged: '0.70'
1735
+ VersionChanged: '1.1'
1686
1736
  SafeAutoCorrect: false
1737
+ IgnoredMethods: []
1738
+ IgnoredClasses:
1739
+ - Time
1740
+ - DateTime
1687
1741
 
1688
1742
  Lint/OrderedMagicComments:
1689
1743
  Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
@@ -1910,6 +1964,11 @@ Lint/Syntax:
1910
1964
  VersionAdded: '0.9'
1911
1965
 
1912
1966
 
1967
+ Lint/ToEnumArguments:
1968
+ Description: 'This cop ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
1969
+ Enabled: pending
1970
+ VersionAdded: '1.1'
1971
+
1913
1972
  Lint/ToJSON:
1914
1973
  Description: 'Ensure #to_json includes an optional argument.'
1915
1974
  Enabled: true
@@ -1936,6 +1995,11 @@ Lint/UnifiedInteger:
1936
1995
  Enabled: true
1937
1996
  VersionAdded: '0.43'
1938
1997
 
1998
+ Lint/UnmodifiedReduceAccumulator:
1999
+ Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.
2000
+ Enabled: pending
2001
+ VersionAdded: '1.1'
2002
+
1939
2003
  Lint/UnreachableCode:
1940
2004
  Description: 'Unreachable code.'
1941
2005
  Enabled: true
@@ -2010,8 +2074,9 @@ Lint/UselessMethodDefinition:
2010
2074
  Lint/UselessSetterCall:
2011
2075
  Description: 'Checks for useless setter call to a local variable.'
2012
2076
  Enabled: true
2077
+ SafeAutoCorrect: false
2013
2078
  VersionAdded: '0.13'
2014
- VersionChanged: '0.80'
2079
+ VersionChanged: '1.2'
2015
2080
  Safe: false
2016
2081
 
2017
2082
  Lint/UselessTimes:
@@ -2155,6 +2220,7 @@ Naming/BinaryOperatorParameterName:
2155
2220
  StyleGuide: '#other-arg'
2156
2221
  Enabled: true
2157
2222
  VersionAdded: '0.50'
2223
+ VersionChanged: '1.2'
2158
2224
 
2159
2225
  Naming/BlockParameterName:
2160
2226
  Description: >-
@@ -2261,6 +2327,7 @@ Naming/HeredocDelimiterCase:
2261
2327
  StyleGuide: '#heredoc-delimiters'
2262
2328
  Enabled: true
2263
2329
  VersionAdded: '0.50'
2330
+ VersionChanged: '1.2'
2264
2331
  EnforcedStyle: uppercase
2265
2332
  SupportedStyles:
2266
2333
  - lowercase
@@ -2279,7 +2346,7 @@ Naming/MemoizedInstanceVariableName:
2279
2346
  Memoized method name should match memo instance variable name.
2280
2347
  Enabled: true
2281
2348
  VersionAdded: '0.53'
2282
- VersionChanged: '0.58'
2349
+ VersionChanged: '1.2'
2283
2350
  EnforcedStyleForLeadingUnderscores: disallowed
2284
2351
  SupportedStylesForLeadingUnderscores:
2285
2352
  - disallowed
@@ -2377,14 +2444,19 @@ Naming/VariableName:
2377
2444
  - camelCase
2378
2445
 
2379
2446
  Naming/VariableNumber:
2380
- Description: 'Use the configured style when numbering variables.'
2447
+ Description: 'Use the configured style when numbering symbols, methods and variables.'
2448
+ StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
2381
2449
  Enabled: true
2382
2450
  VersionAdded: '0.50'
2451
+ VersionChanged: '1.3'
2383
2452
  EnforcedStyle: normalcase
2384
2453
  SupportedStyles:
2385
2454
  - snake_case
2386
2455
  - normalcase
2387
2456
  - non_integer
2457
+ CheckMethodNames: true
2458
+ CheckSymbols: true
2459
+ AllowedIdentifiers: []
2388
2460
 
2389
2461
  #################### Security ##############################
2390
2462
 
@@ -2478,6 +2550,13 @@ Style/AndOr:
2478
2550
  - always
2479
2551
  - conditionals
2480
2552
 
2553
+ Style/ArgumentsForwarding:
2554
+ Description: 'Use arguments forwarding.'
2555
+ StyleGuide: '#arguments-forwarding'
2556
+ Enabled: pending
2557
+ AllowOnlyRestArgument: true
2558
+ VersionAdded: '1.1'
2559
+
2481
2560
  Style/ArrayCoercion:
2482
2561
  Description: >-
2483
2562
  Use Array() instead of explicit Array check or [*var], when dealing
@@ -2756,6 +2835,13 @@ Style/ClassVars:
2756
2835
  Enabled: true
2757
2836
  VersionAdded: '0.13'
2758
2837
 
2838
+ Style/CollectionCompact:
2839
+ Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.'
2840
+ Enabled: pending
2841
+ Safe: false
2842
+ VersionAdded: '1.2'
2843
+ VersionChanged: '1.3'
2844
+
2759
2845
  # Align with the style guide.
2760
2846
  Style/CollectionMethods:
2761
2847
  Description: 'Preferred collection methods.'
@@ -2819,17 +2905,18 @@ Style/CommandLiteral:
2819
2905
  Style/CommentAnnotation:
2820
2906
  Description: >-
2821
2907
  Checks formatting of special comments
2822
- (TODO, FIXME, OPTIMIZE, HACK, REVIEW).
2908
+ (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE).
2823
2909
  StyleGuide: '#annotate-keywords'
2824
2910
  Enabled: true
2825
2911
  VersionAdded: '0.10'
2826
- VersionChanged: '0.31'
2912
+ VersionChanged: '1.3'
2827
2913
  Keywords:
2828
2914
  - TODO
2829
2915
  - FIXME
2830
2916
  - OPTIMIZE
2831
2917
  - HACK
2832
2918
  - REVIEW
2919
+ - NOTE
2833
2920
 
2834
2921
  Style/CommentedKeyword:
2835
2922
  Description: 'Do not place comments on the same line as certain keywords.'
@@ -2918,6 +3005,15 @@ Style/DisableCopsWithinSourceCodeDirective:
2918
3005
  Enabled: false
2919
3006
  VersionAdded: '0.82'
2920
3007
 
3008
+ Style/DocumentDynamicEvalDefinition:
3009
+ Description: >-
3010
+ When using `class_eval` (or other `eval`) with string interpolation,
3011
+ add a comment block showing its appearance if interpolated.
3012
+ StyleGuide: '#eval-comment-docs'
3013
+ Enabled: pending
3014
+ VersionAdded: '1.1'
3015
+ VersionChanged: '1.3'
3016
+
2921
3017
  Style/Documentation:
2922
3018
  Description: 'Document classes and non-namespace modules.'
2923
3019
  Enabled: true
@@ -2945,7 +3041,7 @@ Style/DoubleNegation:
2945
3041
  StyleGuide: '#no-bang-bang'
2946
3042
  Enabled: true
2947
3043
  VersionAdded: '0.19'
2948
- VersionChanged: '0.84'
3044
+ VersionChanged: '1.2'
2949
3045
  EnforcedStyle: allowed_in_returns
2950
3046
  SafeAutoCorrect: false
2951
3047
  SupportedStyles:
@@ -3244,6 +3340,7 @@ Style/IfInsideElse:
3244
3340
  Enabled: true
3245
3341
  AllowIfModifier: false
3246
3342
  VersionAdded: '0.36'
3343
+ VersionChanged: '1.3'
3247
3344
 
3248
3345
  Style/IfUnlessModifier:
3249
3346
  Description: >-
@@ -3276,12 +3373,14 @@ Style/ImplicitRuntimeError:
3276
3373
  VersionAdded: '0.41'
3277
3374
 
3278
3375
  Style/InfiniteLoop:
3279
- Description: 'Use Kernel#loop for infinite loops.'
3376
+ Description: >-
3377
+ Use Kernel#loop for infinite loops.
3378
+ This cop is unsafe in the body may raise a `StopIteration` exception.
3379
+ Safe: false
3280
3380
  StyleGuide: '#infinite-loop'
3281
3381
  Enabled: true
3282
3382
  VersionAdded: '0.26'
3283
3383
  VersionChanged: '0.61'
3284
- SafeAutoCorrect: true
3285
3384
 
3286
3385
  Style/InlineComment:
3287
3386
  Description: 'Avoid trailing inline comments.'
@@ -3535,6 +3634,7 @@ Style/MultipleComparison:
3535
3634
  use Array#include? instead.
3536
3635
  Enabled: true
3537
3636
  VersionAdded: '0.49'
3637
+ VersionChanged: '1.1'
3538
3638
 
3539
3639
  Style/MutableConstant:
3540
3640
  Description: 'Do not assign mutable objects to constants.'
@@ -3569,6 +3669,13 @@ Style/NegatedIf:
3569
3669
  - prefix
3570
3670
  - postfix
3571
3671
 
3672
+ Style/NegatedIfElseCondition:
3673
+ Description: >-
3674
+ This cop checks for uses of `if-else` and ternary operators with a negated condition
3675
+ which can be simplified by inverting condition and swapping branches.
3676
+ Enabled: pending
3677
+ VersionAdded: '1.2'
3678
+
3572
3679
  Style/NegatedUnless:
3573
3680
  Description: 'Favor if over unless for negative conditions.'
3574
3681
  StyleGuide: '#if-for-negatives'
@@ -3656,6 +3763,11 @@ Style/NilComparison:
3656
3763
  - predicate
3657
3764
  - comparison
3658
3765
 
3766
+ Style/NilLambda:
3767
+ Description: 'Prefer `-> {}` to `-> { nil }`.'
3768
+ Enabled: pending
3769
+ VersionAdded: '1.3'
3770
+
3659
3771
  Style/NonNilCheck:
3660
3772
  Description: 'Checks for redundant nil checks.'
3661
3773
  StyleGuide: '#no-non-nil-checks'
@@ -3846,11 +3958,12 @@ Style/RaiseArgs:
3846
3958
  StyleGuide: '#exception-class-messages'
3847
3959
  Enabled: true
3848
3960
  VersionAdded: '0.14'
3849
- VersionChanged: '0.40'
3961
+ VersionChanged: '1.2'
3850
3962
  EnforcedStyle: exploded
3851
3963
  SupportedStyles:
3852
3964
  - compact # raise Exception.new(msg)
3853
3965
  - exploded # raise Exception, msg
3966
+ AllowedCompactTypes: []
3854
3967
 
3855
3968
  Style/RandomWithOffset:
3856
3969
  Description: >-
@@ -4154,6 +4267,13 @@ Style/StabbyLambdaParentheses:
4154
4267
  - require_parentheses
4155
4268
  - require_no_parentheses
4156
4269
 
4270
+ Style/StaticClass:
4271
+ Description: 'Prefer modules to classes with only class methods.'
4272
+ StyleGuide: '#modules-vs-classes'
4273
+ Enabled: false
4274
+ Safe: false
4275
+ VersionAdded: '1.3'
4276
+
4157
4277
  Style/StderrPuts:
4158
4278
  Description: 'Use `warn` instead of `$stderr.puts`.'
4159
4279
  StyleGuide: '#warn'
@@ -4226,6 +4346,13 @@ Style/StructInheritance:
4226
4346
  VersionAdded: '0.29'
4227
4347
  VersionChanged: '0.86'
4228
4348
 
4349
+ Style/SwapValues:
4350
+ Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
4351
+ StyleGuide: '#values-swapping'
4352
+ Enabled: pending
4353
+ VersionAdded: '1.1'
4354
+ SafeAutoCorrect: false
4355
+
4229
4356
  Style/SymbolArray:
4230
4357
  Description: 'Use %i or %I for arrays of symbols.'
4231
4358
  StyleGuide: '#percent-i'