rubocop 1.0.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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'