rubocop 0.92.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -7
  3. data/config/default.yml +169 -59
  4. data/exe/rubocop +1 -1
  5. data/lib/rubocop.rb +15 -3
  6. data/lib/rubocop/cached_data.rb +2 -1
  7. data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
  8. data/lib/rubocop/cli/command/version.rb +1 -1
  9. data/lib/rubocop/comment_config.rb +1 -1
  10. data/lib/rubocop/config.rb +4 -0
  11. data/lib/rubocop/config_loader.rb +19 -2
  12. data/lib/rubocop/config_loader_resolver.rb +7 -5
  13. data/lib/rubocop/config_validator.rb +7 -6
  14. data/lib/rubocop/cop/badge.rb +9 -24
  15. data/lib/rubocop/cop/base.rb +16 -1
  16. data/lib/rubocop/cop/bundler/duplicated_gem.rb +23 -3
  17. data/lib/rubocop/cop/commissioner.rb +36 -22
  18. data/lib/rubocop/cop/corrector.rb +3 -1
  19. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
  20. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
  21. data/lib/rubocop/cop/force.rb +1 -1
  22. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +10 -10
  23. data/lib/rubocop/cop/layout/class_structure.rb +7 -0
  24. data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
  25. data/lib/rubocop/cop/layout/dot_position.rb +6 -9
  26. data/lib/rubocop/cop/layout/else_alignment.rb +15 -2
  27. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +7 -7
  28. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -1
  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/space_around_block_parameters.rb +24 -18
  33. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +2 -11
  34. data/lib/rubocop/cop/layout/space_around_operators.rb +4 -1
  35. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +0 -4
  36. data/lib/rubocop/cop/layout/space_inside_parens.rb +35 -13
  37. data/lib/rubocop/cop/layout/trailing_whitespace.rb +37 -13
  38. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +2 -0
  39. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +18 -1
  40. data/lib/rubocop/cop/lint/boolean_symbol.rb +3 -0
  41. data/lib/rubocop/cop/lint/debugger.rb +2 -3
  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 +59 -0
  45. data/lib/rubocop/cop/lint/flip_flop.rb +8 -2
  46. data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +37 -0
  47. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +17 -3
  48. data/lib/rubocop/cop/lint/loop.rb +0 -4
  49. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -0
  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/parentheses_as_grouped_expression.rb +1 -1
  55. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +78 -0
  56. data/lib/rubocop/cop/lint/to_enum_arguments.rb +95 -0
  57. data/lib/rubocop/cop/lint/to_json.rb +1 -1
  58. data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +185 -0
  59. data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
  60. data/lib/rubocop/cop/lint/useless_setter_call.rb +6 -1
  61. data/lib/rubocop/cop/metrics/block_length.rb +3 -1
  62. data/lib/rubocop/cop/metrics/class_length.rb +14 -6
  63. data/lib/rubocop/cop/metrics/parameter_lists.rb +4 -1
  64. data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
  65. data/lib/rubocop/cop/mixin/hash_transform_method.rb +1 -1
  66. data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
  67. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +12 -2
  68. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +11 -5
  69. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +67 -18
  70. data/lib/rubocop/cop/naming/predicate_name.rb +2 -1
  71. data/lib/rubocop/cop/naming/variable_number.rb +82 -8
  72. data/lib/rubocop/cop/offense.rb +18 -5
  73. data/lib/rubocop/cop/security/open.rb +12 -10
  74. data/lib/rubocop/cop/style/access_modifier_declarations.rb +6 -2
  75. data/lib/rubocop/cop/style/accessor_grouping.rb +3 -0
  76. data/lib/rubocop/cop/style/arguments_forwarding.rb +142 -0
  77. data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -4
  78. data/lib/rubocop/cop/style/case_like_if.rb +18 -6
  79. data/lib/rubocop/cop/style/class_equality_comparison.rb +64 -0
  80. data/lib/rubocop/cop/style/collection_compact.rb +85 -0
  81. data/lib/rubocop/cop/style/combinable_loops.rb +8 -1
  82. data/lib/rubocop/cop/style/comment_annotation.rb +6 -0
  83. data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +67 -0
  84. data/lib/rubocop/cop/style/double_negation.rb +6 -1
  85. data/lib/rubocop/cop/style/explicit_block_argument.rb +6 -2
  86. data/lib/rubocop/cop/style/for.rb +0 -4
  87. data/lib/rubocop/cop/style/format_string_token.rb +48 -3
  88. data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
  89. data/lib/rubocop/cop/style/keyword_parameters_order.rb +12 -0
  90. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +10 -13
  91. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +6 -11
  92. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +7 -11
  93. data/lib/rubocop/cop/style/method_def_parentheses.rb +0 -4
  94. data/lib/rubocop/cop/style/mixin_grouping.rb +0 -4
  95. data/lib/rubocop/cop/style/multiple_comparison.rb +54 -7
  96. data/lib/rubocop/cop/style/negated_if_else_condition.rb +99 -0
  97. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -0
  98. data/lib/rubocop/cop/style/raise_args.rb +21 -9
  99. data/lib/rubocop/cop/style/redundant_begin.rb +36 -8
  100. data/lib/rubocop/cop/style/redundant_condition.rb +5 -1
  101. data/lib/rubocop/cop/style/redundant_interpolation.rb +6 -1
  102. data/lib/rubocop/cop/style/redundant_parentheses.rb +4 -0
  103. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +45 -24
  104. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -15
  105. data/lib/rubocop/cop/style/redundant_self.rb +3 -0
  106. data/lib/rubocop/cop/style/safe_navigation.rb +16 -4
  107. data/lib/rubocop/cop/style/semicolon.rb +3 -0
  108. data/lib/rubocop/cop/style/string_concatenation.rb +14 -2
  109. data/lib/rubocop/cop/style/swap_values.rb +108 -0
  110. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
  111. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +3 -1
  112. data/lib/rubocop/cop/team.rb +6 -1
  113. data/lib/rubocop/cop/util.rb +5 -1
  114. data/lib/rubocop/cop/variable_force/branch.rb +0 -4
  115. data/lib/rubocop/ext/regexp_node.rb +35 -11
  116. data/lib/rubocop/ext/regexp_parser.rb +84 -0
  117. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  118. data/lib/rubocop/formatter/git_hub_actions_formatter.rb +47 -0
  119. data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
  120. data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
  121. data/lib/rubocop/magic_comment.rb +2 -2
  122. data/lib/rubocop/options.rb +6 -1
  123. data/lib/rubocop/result_cache.rb +8 -2
  124. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  125. data/lib/rubocop/rspec/shared_contexts.rb +4 -0
  126. data/lib/rubocop/runner.rb +4 -4
  127. data/lib/rubocop/target_finder.rb +23 -25
  128. data/lib/rubocop/version.rb +56 -6
  129. metadata +22 -8
  130. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 682e17739f5c067f13eb30a3e84b365533bb0e075da92a40529c943e5a67e3b0
4
- data.tar.gz: 2c7e59ef470ad45515bed37249c97419181add1f451379d00b31ff45b21ddd36
3
+ metadata.gz: 9139e9c7213e73e6f44db7e88265254dc4b4e11ab0fa38b0fa88268070ff0a6a
4
+ data.tar.gz: 5590d626e845237529e7e21dbc162b2704fdbe5f37a39f0e29d3e164b550a03e
5
5
  SHA512:
6
- metadata.gz: 0bc3d0c3238795b8563b974c99c20d3cfb34dff97bc33f5231d6ef7497f53ce6f4753923bce17954fe30e69b0a8d4146a3b1377d0489e7f10bc97a0b3c69ae7b
7
- data.tar.gz: 4131b9c8a874e09d8c0581a04e91b44acc76855afa565cd52a324055a0bd7e1a40d37bc532b8b3781c9af9847335c6596ca8ed17fe9bff03d13283171d77c168
6
+ metadata.gz: 04ce9f16ffe193e6a048a2fe2b5c0015a148becdfc25bcd67efdd5cf207727eed3ab3440bbf5f8f2473868d9f697fb88b2c2f810bfe217fb23153d010318bde8
7
+ data.tar.gz: bd33137303ca551db1a8e67ad96bb14b376207caf88ba0c82efb3202c2373b94f22bd9e19f3a8b9cfd475bc6955078c13a87b8236e6703e8ad48c2b14a2cb271
data/README.md CHANGED
@@ -43,15 +43,18 @@ If you'd rather install RuboCop using `bundler`, add a line for it in your `Gemf
43
43
  gem 'rubocop', require: false
44
44
  ```
45
45
 
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`:
46
+ RuboCop is stable between major versions, both in terms of API and cop configuration.
47
+ We aim the ease the maintenance of RuboCop extensions and the upgrades between RuboCop
48
+ releases. All big changes are reserved for major releases.
49
+ To prevent an unwanted RuboCop update you might want to use a conservative version lock
50
+ in your `Gemfile`:
50
51
 
51
52
  ```rb
52
- gem 'rubocop', '~> 0.92.0', require: false
53
+ gem 'rubocop', '~> 1.2', require: false
53
54
  ```
54
55
 
56
+ See [versioning](https://docs.rubocop.org/rubocop/1.0/versioning.html) for further details.
57
+
55
58
  ## Quickstart
56
59
 
57
60
  Just type `rubocop` in a Ruby project's folder and watch the magic happen.
@@ -67,12 +70,12 @@ You can read a lot more about RuboCop in its [official docs](https://docs.ruboco
67
70
 
68
71
  ## Compatibility
69
72
 
70
- RuboCop supports the following Ruby implementations:
73
+ RuboCop officially supports the following Ruby implementations:
71
74
 
72
75
  * MRI 2.4+
73
76
  * JRuby 9.2+
74
77
 
75
- See [compatibility](https://docs.rubocop.org/rubocop/compatibility.html) for further details.
78
+ See the [compatibility documentation](https://docs.rubocop.org/rubocop/compatibility.html) for further details.
76
79
 
77
80
  ## Readme Badge
78
81
 
@@ -82,6 +85,15 @@ If you use RuboCop in your project, you can include one of these badges in your
82
85
 
83
86
  [![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide)
84
87
 
88
+
89
+ Here are the Markdown snippets for the two badges:
90
+
91
+ ``` markdown
92
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop-hq/rubocop)
93
+
94
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide)
95
+ ```
96
+
85
97
  ## Team
86
98
 
87
99
  Here's a list of RuboCop's core developers:
@@ -97,6 +109,8 @@ Here's a list of RuboCop's core developers:
97
109
  * [Benjamin Quorning](https://github.com/bquorning)
98
110
  * [Marc-André Lafortune](https://github.com/marcandre)
99
111
 
112
+ See the [team page](https://docs.rubocop.org/rubocop/about/team.html) for more details.
113
+
100
114
  ## Logo
101
115
 
102
116
  RuboCop's logo was created by [Dimiter Petrov](https://www.chadomoto.com/). You can find the logo in various
@@ -313,7 +313,7 @@ Layout/AssignmentIndentation:
313
313
 
314
314
  Layout/BeginEndAlignment:
315
315
  Description: 'Align ends corresponding to begins correctly.'
316
- Enabled: pending
316
+ Enabled: true
317
317
  VersionAdded: '0.91'
318
318
  # The value `start_of_line` means that `end` should be aligned the start of the line
319
319
  # where the `begin` keyword is.
@@ -496,7 +496,7 @@ Layout/EmptyLinesAroundArguments:
496
496
  Layout/EmptyLinesAroundAttributeAccessor:
497
497
  Description: "Keep blank lines around attribute accessors."
498
498
  StyleGuide: '#empty-lines-around-attribute-accessor'
499
- Enabled: pending
499
+ Enabled: true
500
500
  VersionAdded: '0.83'
501
501
  VersionChanged: '0.84'
502
502
  AllowAliasSyntax: true
@@ -1145,7 +1145,7 @@ Layout/SpaceAroundKeyword:
1145
1145
 
1146
1146
  Layout/SpaceAroundMethodCallOperator:
1147
1147
  Description: 'Checks method call operators to not have spaces around them.'
1148
- Enabled: pending
1148
+ Enabled: true
1149
1149
  VersionAdded: '0.82'
1150
1150
 
1151
1151
  Layout/SpaceAroundOperators:
@@ -1334,8 +1334,8 @@ Layout/TrailingWhitespace:
1334
1334
  StyleGuide: '#no-trailing-whitespace'
1335
1335
  Enabled: true
1336
1336
  VersionAdded: '0.49'
1337
- VersionChanged: '0.83'
1338
- AllowInHeredoc: true
1337
+ VersionChanged: '1.0'
1338
+ AllowInHeredoc: false
1339
1339
 
1340
1340
  #################### Lint ##################################
1341
1341
  ### Warnings
@@ -1379,7 +1379,7 @@ Lint/BigDecimalNew:
1379
1379
 
1380
1380
  Lint/BinaryOperatorWithIdenticalOperands:
1381
1381
  Description: 'This cop checks for places where binary operator has identical operands.'
1382
- Enabled: pending
1382
+ Enabled: true
1383
1383
  Safe: false
1384
1384
  VersionAdded: '0.89'
1385
1385
 
@@ -1398,7 +1398,7 @@ Lint/CircularArgumentReference:
1398
1398
  Lint/ConstantDefinitionInBlock:
1399
1399
  Description: 'Do not define constants within a block.'
1400
1400
  StyleGuide: '#no-constant-definition-in-block'
1401
- Enabled: pending
1401
+ Enabled: true
1402
1402
  VersionAdded: '0.91'
1403
1403
 
1404
1404
  Lint/ConstantResolution:
@@ -1423,7 +1423,7 @@ Lint/DeprecatedClassMethods:
1423
1423
 
1424
1424
  Lint/DeprecatedOpenSSLConstant:
1425
1425
  Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`."
1426
- Enabled: pending
1426
+ Enabled: true
1427
1427
  VersionAdded: '0.84'
1428
1428
 
1429
1429
  Lint/DisjunctiveAssignmentInConstructor:
@@ -1440,7 +1440,7 @@ Lint/DuplicateCaseCondition:
1440
1440
 
1441
1441
  Lint/DuplicateElsifCondition:
1442
1442
  Description: 'Do not repeat conditions used in if `elsif`.'
1443
- Enabled: 'pending'
1443
+ Enabled: true
1444
1444
  VersionAdded: '0.88'
1445
1445
 
1446
1446
  Lint/DuplicateHashKey:
@@ -1454,14 +1454,19 @@ Lint/DuplicateMethods:
1454
1454
  Enabled: true
1455
1455
  VersionAdded: '0.29'
1456
1456
 
1457
+ Lint/DuplicateRegexpCharacterClassElement:
1458
+ Description: 'Checks for duplicate elements in Regexp character classes.'
1459
+ Enabled: pending
1460
+ VersionAdded: '1.1'
1461
+
1457
1462
  Lint/DuplicateRequire:
1458
1463
  Description: 'Check for duplicate `require`s and `require_relative`s.'
1459
- Enabled: pending
1464
+ Enabled: true
1460
1465
  VersionAdded: '0.90'
1461
1466
 
1462
1467
  Lint/DuplicateRescueException:
1463
1468
  Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.'
1464
- Enabled: pending
1469
+ Enabled: true
1465
1470
  VersionAdded: '0.89'
1466
1471
 
1467
1472
  Lint/EachWithObjectArgument:
@@ -1473,10 +1478,17 @@ Lint/ElseLayout:
1473
1478
  Description: 'Check for odd code arrangement in an else block.'
1474
1479
  Enabled: true
1475
1480
  VersionAdded: '0.17'
1481
+ VersionChanged: '1.2'
1482
+
1483
+ Lint/EmptyBlock:
1484
+ Description: 'This cop checks for blocks without a body.'
1485
+ Enabled: pending
1486
+ VersionAdded: '1.1'
1487
+ AllowComments: true
1476
1488
 
1477
1489
  Lint/EmptyConditionalBody:
1478
1490
  Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.'
1479
- Enabled: 'pending'
1491
+ Enabled: true
1480
1492
  AllowComments: true
1481
1493
  VersionAdded: '0.89'
1482
1494
 
@@ -1493,7 +1505,7 @@ Lint/EmptyExpression:
1493
1505
 
1494
1506
  Lint/EmptyFile:
1495
1507
  Description: 'Enforces that Ruby source files are not empty.'
1496
- Enabled: pending
1508
+ Enabled: true
1497
1509
  AllowComments: true
1498
1510
  VersionAdded: '0.90'
1499
1511
 
@@ -1531,7 +1543,7 @@ Lint/FlipFlop:
1531
1543
  Lint/FloatComparison:
1532
1544
  Description: 'Checks for the presence of precise comparison of floating point numbers.'
1533
1545
  StyleGuide: '#float-comparison'
1534
- Enabled: pending
1546
+ Enabled: true
1535
1547
  VersionAdded: '0.89'
1536
1548
 
1537
1549
  Lint/FloatOutOfRange:
@@ -1546,6 +1558,13 @@ Lint/FormatParameterMismatch:
1546
1558
  Enabled: true
1547
1559
  VersionAdded: '0.33'
1548
1560
 
1561
+ Lint/HashCompareByIdentity:
1562
+ Description: 'Prefer using `Hash#compare_by_identity` than using `object_id` for keys.'
1563
+ StyleGuide: '#identity-comparison'
1564
+ Enabled: true
1565
+ Safe: false
1566
+ VersionAdded: '0.93'
1567
+
1549
1568
  Lint/HeredocMethodCallPosition:
1550
1569
  Description: >-
1551
1570
  Checks for the ordering of a method call where
@@ -1556,7 +1575,7 @@ Lint/HeredocMethodCallPosition:
1556
1575
 
1557
1576
  Lint/IdentityComparison:
1558
1577
  Description: 'Prefer `equal?` over `==` when comparing `object_id`.'
1559
- Enabled: pending
1578
+ Enabled: true
1560
1579
  StyleGuide: '#identity-comparison'
1561
1580
  VersionAdded: '0.91'
1562
1581
 
@@ -1628,19 +1647,20 @@ Lint/MissingSuper:
1628
1647
  Description: >-
1629
1648
  This cop checks for the presence of constructors and lifecycle callbacks
1630
1649
  without calls to `super`'.
1631
- Enabled: pending
1650
+ Enabled: true
1632
1651
  VersionAdded: '0.89'
1633
1652
 
1634
1653
  Lint/MixedRegexpCaptureTypes:
1635
1654
  Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
1636
- Enabled: pending
1655
+ Enabled: true
1637
1656
  VersionAdded: '0.85'
1638
1657
 
1639
1658
  Lint/MultipleComparison:
1640
1659
  Description: "Use `&&` operator to compare multiple values."
1641
1660
  Enabled: true
1642
1661
  VersionAdded: '0.47'
1643
- VersionChanged: '0.77'
1662
+ VersionChanged: '1.1'
1663
+ AllowMethodComparison: true
1644
1664
 
1645
1665
  Lint/NestedMethodDefinition:
1646
1666
  Description: 'Do not use nested method definitions.'
@@ -1660,6 +1680,11 @@ Lint/NextWithoutAccumulator:
1660
1680
  Enabled: true
1661
1681
  VersionAdded: '0.36'
1662
1682
 
1683
+ Lint/NoReturnInBeginEndBlocks:
1684
+ Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.'
1685
+ Enabled: pending
1686
+ VersionAdded: '1.2'
1687
+
1663
1688
  Lint/NonDeterministicRequireOrder:
1664
1689
  Description: 'Always sort arrays returned by Dir.glob when requiring files.'
1665
1690
  Enabled: true
@@ -1675,8 +1700,12 @@ Lint/NumberConversion:
1675
1700
  Description: 'Checks unsafe usage of number conversion methods.'
1676
1701
  Enabled: false
1677
1702
  VersionAdded: '0.53'
1678
- VersionChanged: '0.70'
1703
+ VersionChanged: '1.1'
1679
1704
  SafeAutoCorrect: false
1705
+ IgnoredMethods: []
1706
+ IgnoredClasses:
1707
+ - Time
1708
+ - DateTime
1680
1709
 
1681
1710
  Lint/OrderedMagicComments:
1682
1711
  Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.'
@@ -1685,7 +1714,7 @@ Lint/OrderedMagicComments:
1685
1714
 
1686
1715
  Lint/OutOfRangeRegexpRef:
1687
1716
  Description: 'Checks for out of range reference for Regexp because it always returns nil.'
1688
- Enabled: pending
1717
+ Enabled: true
1689
1718
  Safe: false
1690
1719
  VersionAdded: '0.89'
1691
1720
 
@@ -1714,7 +1743,7 @@ Lint/PercentSymbolArray:
1714
1743
  Lint/RaiseException:
1715
1744
  Description: Checks for `raise` or `fail` statements which are raising `Exception` class.
1716
1745
  StyleGuide: '#raise-exception'
1717
- Enabled: pending
1746
+ Enabled: true
1718
1747
  Safe: false
1719
1748
  VersionAdded: '0.81'
1720
1749
  VersionChanged: '0.86'
@@ -1746,6 +1775,19 @@ Lint/RedundantRequireStatement:
1746
1775
  Enabled: true
1747
1776
  VersionAdded: '0.76'
1748
1777
 
1778
+ Lint/RedundantSafeNavigation:
1779
+ Description: 'Checks for redundant safe navigation calls.'
1780
+ Enabled: true
1781
+ VersionAdded: '0.93'
1782
+ AllowedMethods:
1783
+ - instance_of?
1784
+ - kind_of?
1785
+ - is_a?
1786
+ - eql?
1787
+ - respond_to?
1788
+ - equal?
1789
+ Safe: false
1790
+
1749
1791
  Lint/RedundantSplatExpansion:
1750
1792
  Description: 'Checks for splat unnecessarily being called on literals.'
1751
1793
  Enabled: true
@@ -1842,7 +1884,7 @@ Lint/ScriptPermission:
1842
1884
 
1843
1885
  Lint/SelfAssignment:
1844
1886
  Description: 'Checks for self-assignments.'
1845
- Enabled: pending
1887
+ Enabled: true
1846
1888
  VersionAdded: '0.89'
1847
1889
 
1848
1890
  Lint/SendWithMixinArgument:
@@ -1873,7 +1915,7 @@ Lint/ShadowingOuterLocalVariable:
1873
1915
 
1874
1916
  Lint/StructNewOverride:
1875
1917
  Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.'
1876
- Enabled: pending
1918
+ Enabled: true
1877
1919
  VersionAdded: '0.81'
1878
1920
 
1879
1921
  Lint/SuppressedException:
@@ -1890,6 +1932,11 @@ Lint/Syntax:
1890
1932
  VersionAdded: '0.9'
1891
1933
 
1892
1934
 
1935
+ Lint/ToEnumArguments:
1936
+ Description: 'This cop ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.'
1937
+ Enabled: pending
1938
+ VersionAdded: '1.1'
1939
+
1893
1940
  Lint/ToJSON:
1894
1941
  Description: 'Ensure #to_json includes an optional argument.'
1895
1942
  Enabled: true
@@ -1897,12 +1944,12 @@ Lint/ToJSON:
1897
1944
 
1898
1945
  Lint/TopLevelReturnWithArgument:
1899
1946
  Description: 'This cop detects top level return statements with argument.'
1900
- Enabled: 'pending'
1947
+ Enabled: true
1901
1948
  VersionAdded: '0.89'
1902
1949
 
1903
1950
  Lint/TrailingCommaInAttributeDeclaration:
1904
1951
  Description: 'This cop checks for trailing commas in attribute declarations.'
1905
- Enabled: pending
1952
+ Enabled: true
1906
1953
  VersionAdded: '0.90'
1907
1954
 
1908
1955
  Lint/UnderscorePrefixedVariableName:
@@ -1916,6 +1963,11 @@ Lint/UnifiedInteger:
1916
1963
  Enabled: true
1917
1964
  VersionAdded: '0.43'
1918
1965
 
1966
+ Lint/UnmodifiedReduceAccumulator:
1967
+ Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration.
1968
+ Enabled: pending
1969
+ VersionAdded: '1.1'
1970
+
1919
1971
  Lint/UnreachableCode:
1920
1972
  Description: 'Unreachable code.'
1921
1973
  Enabled: true
@@ -1923,7 +1975,7 @@ Lint/UnreachableCode:
1923
1975
 
1924
1976
  Lint/UnreachableLoop:
1925
1977
  Description: 'This cop checks for loops that will have at most one iteration.'
1926
- Enabled: pending
1978
+ Enabled: true
1927
1979
  VersionAdded: '0.89'
1928
1980
 
1929
1981
  Lint/UnusedBlockArgument:
@@ -1982,7 +2034,7 @@ Lint/UselessElseWithoutRescue:
1982
2034
 
1983
2035
  Lint/UselessMethodDefinition:
1984
2036
  Description: 'Checks for useless method definitions.'
1985
- Enabled: pending
2037
+ Enabled: true
1986
2038
  VersionAdded: '0.90'
1987
2039
  Safe: false
1988
2040
  AllowComments: true
@@ -1990,13 +2042,14 @@ Lint/UselessMethodDefinition:
1990
2042
  Lint/UselessSetterCall:
1991
2043
  Description: 'Checks for useless setter call to a local variable.'
1992
2044
  Enabled: true
2045
+ SafeAutoCorrect: false
1993
2046
  VersionAdded: '0.13'
1994
- VersionChanged: '0.80'
2047
+ VersionChanged: '1.2'
1995
2048
  Safe: false
1996
2049
 
1997
2050
  Lint/UselessTimes:
1998
2051
  Description: 'Checks for useless `Integer#times` calls.'
1999
- Enabled: pending
2052
+ Enabled: true
2000
2053
  VersionAdded: '0.91'
2001
2054
  Safe: false
2002
2055
 
@@ -2135,6 +2188,7 @@ Naming/BinaryOperatorParameterName:
2135
2188
  StyleGuide: '#other-arg'
2136
2189
  Enabled: true
2137
2190
  VersionAdded: '0.50'
2191
+ VersionChanged: '1.2'
2138
2192
 
2139
2193
  Naming/BlockParameterName:
2140
2194
  Description: >-
@@ -2241,6 +2295,7 @@ Naming/HeredocDelimiterCase:
2241
2295
  StyleGuide: '#heredoc-delimiters'
2242
2296
  Enabled: true
2243
2297
  VersionAdded: '0.50'
2298
+ VersionChanged: '1.2'
2244
2299
  EnforcedStyle: uppercase
2245
2300
  SupportedStyles:
2246
2301
  - lowercase
@@ -2259,7 +2314,7 @@ Naming/MemoizedInstanceVariableName:
2259
2314
  Memoized method name should match memo instance variable name.
2260
2315
  Enabled: true
2261
2316
  VersionAdded: '0.53'
2262
- VersionChanged: '0.58'
2317
+ VersionChanged: '1.2'
2263
2318
  EnforcedStyleForLeadingUnderscores: disallowed
2264
2319
  SupportedStylesForLeadingUnderscores:
2265
2320
  - disallowed
@@ -2357,14 +2412,18 @@ Naming/VariableName:
2357
2412
  - camelCase
2358
2413
 
2359
2414
  Naming/VariableNumber:
2360
- Description: 'Use the configured style when numbering variables.'
2415
+ Description: 'Use the configured style when numbering symbols, methods and variables.'
2416
+ StyleGuide: '#snake-case-symbols-methods-vars-with-numbers'
2361
2417
  Enabled: true
2362
2418
  VersionAdded: '0.50'
2419
+ VersionChanged: '1.2'
2363
2420
  EnforcedStyle: normalcase
2364
2421
  SupportedStyles:
2365
2422
  - snake_case
2366
2423
  - normalcase
2367
2424
  - non_integer
2425
+ CheckMethodNames: true
2426
+ CheckSymbols: true
2368
2427
 
2369
2428
  #################### Security ##############################
2370
2429
 
@@ -2395,9 +2454,10 @@ Security/MarshalLoad:
2395
2454
  VersionAdded: '0.47'
2396
2455
 
2397
2456
  Security/Open:
2398
- Description: 'The use of Kernel#open represents a serious security risk.'
2457
+ Description: 'The use of `Kernel#open` and `URI.open` represent a serious security risk.'
2399
2458
  Enabled: true
2400
2459
  VersionAdded: '0.53'
2460
+ VersionChanged: '1.0'
2401
2461
  Safe: false
2402
2462
 
2403
2463
  Security/YAMLLoad:
@@ -2424,7 +2484,7 @@ Style/AccessModifierDeclarations:
2424
2484
 
2425
2485
  Style/AccessorGrouping:
2426
2486
  Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
2427
- Enabled: 'pending'
2487
+ Enabled: true
2428
2488
  VersionAdded: '0.87'
2429
2489
  EnforcedStyle: grouped
2430
2490
  SupportedStyles:
@@ -2457,6 +2517,13 @@ Style/AndOr:
2457
2517
  - always
2458
2518
  - conditionals
2459
2519
 
2520
+ Style/ArgumentsForwarding:
2521
+ Description: 'Use arguments forwarding.'
2522
+ StyleGuide: '#arguments-forwarding'
2523
+ Enabled: pending
2524
+ AllowOnlyRestArgument: true
2525
+ VersionAdded: '1.1'
2526
+
2460
2527
  Style/ArrayCoercion:
2461
2528
  Description: >-
2462
2529
  Use Array() instead of explicit Array check or [*var], when dealing
@@ -2513,7 +2580,7 @@ Style/BisectedAttrAccessor:
2513
2580
  Description: >-
2514
2581
  Checks for places where `attr_reader` and `attr_writer`
2515
2582
  for the same method can be combined into single `attr_accessor`.
2516
- Enabled: 'pending'
2583
+ Enabled: true
2517
2584
  VersionAdded: '0.87'
2518
2585
 
2519
2586
  Style/BlockComments:
@@ -2652,7 +2719,7 @@ Style/CaseEquality:
2652
2719
  Style/CaseLikeIf:
2653
2720
  Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.'
2654
2721
  StyleGuide: '#case-vs-if-else'
2655
- Enabled: 'pending'
2722
+ Enabled: true
2656
2723
  Safe: false
2657
2724
  VersionAdded: '0.88'
2658
2725
 
@@ -2702,6 +2769,16 @@ Style/ClassCheck:
2702
2769
  - is_a?
2703
2770
  - kind_of?
2704
2771
 
2772
+ Style/ClassEqualityComparison:
2773
+ Description: 'Enforces the use of `Object#instance_of?` instead of class comparison for equality.'
2774
+ StyleGuide: '#instance-of-vs-class-comparison'
2775
+ Enabled: true
2776
+ VersionAdded: '0.93'
2777
+ IgnoredMethods:
2778
+ - ==
2779
+ - equal?
2780
+ - eql?
2781
+
2705
2782
  Style/ClassMethods:
2706
2783
  Description: 'Use self when defining module/class methods.'
2707
2784
  StyleGuide: '#def-self-class-methods'
@@ -2725,6 +2802,11 @@ Style/ClassVars:
2725
2802
  Enabled: true
2726
2803
  VersionAdded: '0.13'
2727
2804
 
2805
+ Style/CollectionCompact:
2806
+ Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.'
2807
+ Enabled: pending
2808
+ VersionAdded: '1.2'
2809
+
2728
2810
  # Align with the style guide.
2729
2811
  Style/CollectionMethods:
2730
2812
  Description: 'Preferred collection methods.'
@@ -2763,7 +2845,7 @@ Style/CombinableLoops:
2763
2845
  Description: >-
2764
2846
  Checks for places where multiple consecutive loops over the same data
2765
2847
  can be combined into a single loop.
2766
- Enabled: pending
2848
+ Enabled: true
2767
2849
  Safe: false
2768
2850
  VersionAdded: '0.90'
2769
2851
 
@@ -2887,6 +2969,14 @@ Style/DisableCopsWithinSourceCodeDirective:
2887
2969
  Enabled: false
2888
2970
  VersionAdded: '0.82'
2889
2971
 
2972
+ Style/DocumentDynamicEvalDefinition:
2973
+ Description: >-
2974
+ When using `class_eval` (or other `eval`) with string interpolation,
2975
+ add a comment block showing its appearance if interpolated.
2976
+ StyleGuide: '#eval-comment-docs'
2977
+ Enabled: pending
2978
+ VersionAdded: '1.1'
2979
+
2890
2980
  Style/Documentation:
2891
2981
  Description: 'Document classes and non-namespace modules.'
2892
2982
  Enabled: true
@@ -2914,7 +3004,7 @@ Style/DoubleNegation:
2914
3004
  StyleGuide: '#no-bang-bang'
2915
3005
  Enabled: true
2916
3006
  VersionAdded: '0.19'
2917
- VersionChanged: '0.84'
3007
+ VersionChanged: '1.2'
2918
3008
  EnforcedStyle: allowed_in_returns
2919
3009
  SafeAutoCorrect: false
2920
3010
  SupportedStyles:
@@ -3016,7 +3106,7 @@ Style/ExplicitBlockArgument:
3016
3106
  Consider using explicit block argument to avoid writing block literal
3017
3107
  that just passes its arguments to another block.
3018
3108
  StyleGuide: '#block-argument'
3019
- Enabled: pending
3109
+ Enabled: true
3020
3110
  # May change the yielding arity.
3021
3111
  Safe: false
3022
3112
  VersionAdded: '0.89'
@@ -3024,7 +3114,7 @@ Style/ExplicitBlockArgument:
3024
3114
  Style/ExponentialNotation:
3025
3115
  Description: 'When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).'
3026
3116
  StyleGuide: '#exponential-notation'
3027
- Enabled: pending
3117
+ Enabled: true
3028
3118
  VersionAdded: '0.82'
3029
3119
  EnforcedStyle: scientific
3030
3120
  SupportedStyles:
@@ -3079,8 +3169,12 @@ Style/FormatStringToken:
3079
3169
  # Prefer simple looking "template" style tokens like `%{name}`, `%{age}`
3080
3170
  - template
3081
3171
  - unannotated
3172
+ # `MaxUnannotatedPlaceholdersAllowed` defines the number of `unannotated`
3173
+ # style token in a format string to be allowed when enforced style is not
3174
+ # `unannotated`.
3175
+ MaxUnannotatedPlaceholdersAllowed: 1
3082
3176
  VersionAdded: '0.49'
3083
- VersionChanged: '0.75'
3177
+ VersionChanged: '1.0'
3084
3178
 
3085
3179
  Style/FrozenStringLiteralComment:
3086
3180
  Description: >-
@@ -3107,7 +3201,7 @@ Style/FrozenStringLiteralComment:
3107
3201
  Style/GlobalStdStream:
3108
3202
  Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.'
3109
3203
  StyleGuide: '#global-stdout'
3110
- Enabled: pending
3204
+ Enabled: true
3111
3205
  VersionAdded: '0.89'
3112
3206
  SafeAutoCorrect: false
3113
3207
 
@@ -3135,7 +3229,7 @@ Style/HashAsLastArrayItem:
3135
3229
  Checks for presence or absence of braces around hash literal as a last
3136
3230
  array item depending on configuration.
3137
3231
  StyleGuide: '#hash-literal-as-last-array-item'
3138
- Enabled: 'pending'
3232
+ Enabled: true
3139
3233
  VersionAdded: '0.88'
3140
3234
  EnforcedStyle: braces
3141
3235
  SupportedStyles:
@@ -3145,7 +3239,7 @@ Style/HashAsLastArrayItem:
3145
3239
  Style/HashEachMethods:
3146
3240
  Description: 'Use Hash#each_key and Hash#each_value.'
3147
3241
  StyleGuide: '#hash-each'
3148
- Enabled: pending
3242
+ Enabled: true
3149
3243
  VersionAdded: '0.80'
3150
3244
  Safe: false
3151
3245
 
@@ -3153,7 +3247,7 @@ Style/HashLikeCase:
3153
3247
  Description: >-
3154
3248
  Checks for places where `case-when` represents a simple 1:1
3155
3249
  mapping and can be replaced with a hash lookup.
3156
- Enabled: 'pending'
3250
+ Enabled: true
3157
3251
  VersionAdded: '0.88'
3158
3252
  # `MinBranchesCount` defines the number of branches `case` needs to have
3159
3253
  # to trigger this cop
@@ -3184,14 +3278,14 @@ Style/HashSyntax:
3184
3278
 
3185
3279
  Style/HashTransformKeys:
3186
3280
  Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.'
3187
- Enabled: 'pending'
3281
+ Enabled: true
3188
3282
  VersionAdded: '0.80'
3189
3283
  VersionChanged: '0.90'
3190
3284
  Safe: false
3191
3285
 
3192
3286
  Style/HashTransformValues:
3193
3287
  Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.'
3194
- Enabled: 'pending'
3288
+ Enabled: true
3195
3289
  VersionAdded: '0.80'
3196
3290
  VersionChanged: '0.90'
3197
3291
  Safe: false
@@ -3298,7 +3392,7 @@ Style/IpAddresses:
3298
3392
  Style/KeywordParametersOrder:
3299
3393
  Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
3300
3394
  StyleGuide: '#keyword-parameters-order'
3301
- Enabled: pending
3395
+ Enabled: true
3302
3396
  VersionAdded: '0.90'
3303
3397
 
3304
3398
  Style/Lambda:
@@ -3500,6 +3594,7 @@ Style/MultipleComparison:
3500
3594
  use Array#include? instead.
3501
3595
  Enabled: true
3502
3596
  VersionAdded: '0.49'
3597
+ VersionChanged: '1.1'
3503
3598
 
3504
3599
  Style/MutableConstant:
3505
3600
  Description: 'Do not assign mutable objects to constants.'
@@ -3534,6 +3629,13 @@ Style/NegatedIf:
3534
3629
  - prefix
3535
3630
  - postfix
3536
3631
 
3632
+ Style/NegatedIfElseCondition:
3633
+ Description: >-
3634
+ This cop checks for uses of `if-else` and ternary operators with a negated condition
3635
+ which can be simplified by inverting condition and swapping branches.
3636
+ Enabled: pending
3637
+ VersionAdded: '1.2'
3638
+
3537
3639
  Style/NegatedUnless:
3538
3640
  Description: 'Favor if over unless for negative conditions.'
3539
3641
  StyleGuide: '#if-for-negatives'
@@ -3723,7 +3825,7 @@ Style/OptionalArguments:
3723
3825
  Style/OptionalBooleanParameter:
3724
3826
  Description: 'Use keyword arguments when defining method with boolean argument.'
3725
3827
  StyleGuide: '#boolean-keyword-arguments'
3726
- Enabled: pending
3828
+ Enabled: true
3727
3829
  Safe: false
3728
3830
  VersionAdded: '0.89'
3729
3831
  AllowedMethods:
@@ -3811,11 +3913,12 @@ Style/RaiseArgs:
3811
3913
  StyleGuide: '#exception-class-messages'
3812
3914
  Enabled: true
3813
3915
  VersionAdded: '0.14'
3814
- VersionChanged: '0.40'
3916
+ VersionChanged: '1.2'
3815
3917
  EnforcedStyle: exploded
3816
3918
  SupportedStyles:
3817
3919
  - compact # raise Exception.new(msg)
3818
3920
  - exploded # raise Exception, msg
3921
+ AllowedCompactTypes: []
3819
3922
 
3820
3923
  Style/RandomWithOffset:
3821
3924
  Description: >-
@@ -3827,7 +3930,7 @@ Style/RandomWithOffset:
3827
3930
 
3828
3931
  Style/RedundantAssignment:
3829
3932
  Description: 'Checks for redundant assignment before returning.'
3830
- Enabled: 'pending'
3933
+ Enabled: true
3831
3934
  VersionAdded: '0.87'
3832
3935
 
3833
3936
  Style/RedundantBegin:
@@ -3864,7 +3967,7 @@ Style/RedundantFetchBlock:
3864
3967
  Use `fetch(key, value)` instead of `fetch(key) { value }`
3865
3968
  when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.
3866
3969
  Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code'
3867
- Enabled: 'pending'
3970
+ Enabled: true
3868
3971
  Safe: false
3869
3972
  # If enabled, this cop will autocorrect usages of
3870
3973
  # `fetch` being called with block returning a constant.
@@ -3877,7 +3980,7 @@ Style/RedundantFileExtensionInRequire:
3877
3980
  Checks for the presence of superfluous `.rb` extension in
3878
3981
  the filename provided to `require` and `require_relative`.
3879
3982
  StyleGuide: '#no-explicit-rb-to-require'
3880
- Enabled: 'pending'
3983
+ Enabled: true
3881
3984
  VersionAdded: '0.88'
3882
3985
 
3883
3986
  Style/RedundantFreeze:
@@ -3904,12 +4007,12 @@ Style/RedundantPercentQ:
3904
4007
 
3905
4008
  Style/RedundantRegexpCharacterClass:
3906
4009
  Description: 'Checks for unnecessary single-element Regexp character classes.'
3907
- Enabled: pending
4010
+ Enabled: true
3908
4011
  VersionAdded: '0.85'
3909
4012
 
3910
4013
  Style/RedundantRegexpEscape:
3911
4014
  Description: 'Checks for redundant escapes in Regexps.'
3912
- Enabled: pending
4015
+ Enabled: true
3913
4016
  VersionAdded: '0.85'
3914
4017
 
3915
4018
  Style/RedundantReturn:
@@ -3930,7 +4033,7 @@ Style/RedundantSelf:
3930
4033
 
3931
4034
  Style/RedundantSelfAssignment:
3932
4035
  Description: 'Checks for places where redundant assignments are made for in place modification methods.'
3933
- Enabled: pending
4036
+ Enabled: true
3934
4037
  Safe: false
3935
4038
  VersionAdded: '0.90'
3936
4039
 
@@ -4058,7 +4161,7 @@ Style/SignalException:
4058
4161
 
4059
4162
  Style/SingleArgumentDig:
4060
4163
  Description: 'Avoid using single argument dig method.'
4061
- Enabled: pending
4164
+ Enabled: true
4062
4165
  VersionAdded: '0.89'
4063
4166
  Safe: false
4064
4167
 
@@ -4085,7 +4188,7 @@ Style/SingleLineMethods:
4085
4188
 
4086
4189
  Style/SlicingWithRange:
4087
4190
  Description: 'Checks array slicing is done with endless ranges when suitable.'
4088
- Enabled: pending
4191
+ Enabled: true
4089
4192
  VersionAdded: '0.83'
4090
4193
  Safe: false
4091
4194
 
@@ -4093,7 +4196,7 @@ Style/SoleNestedConditional:
4093
4196
  Description: >-
4094
4197
  Finds sole nested conditional nodes
4095
4198
  which can be merged into outer conditional node.
4096
- Enabled: pending
4199
+ Enabled: true
4097
4200
  VersionAdded: '0.89'
4098
4201
  AllowModifier: false
4099
4202
 
@@ -4128,7 +4231,7 @@ Style/StderrPuts:
4128
4231
  Style/StringConcatenation:
4129
4232
  Description: 'Checks for places where string concatenation can be replaced with string interpolation.'
4130
4233
  StyleGuide: '#string-interpolation'
4131
- Enabled: pending
4234
+ Enabled: true
4132
4235
  Safe: false
4133
4236
  VersionAdded: '0.89'
4134
4237
 
@@ -4191,6 +4294,13 @@ Style/StructInheritance:
4191
4294
  VersionAdded: '0.29'
4192
4295
  VersionChanged: '0.86'
4193
4296
 
4297
+ Style/SwapValues:
4298
+ Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
4299
+ StyleGuide: '#values-swapping'
4300
+ Enabled: pending
4301
+ VersionAdded: '1.1'
4302
+ SafeAutoCorrect: false
4303
+
4194
4304
  Style/SymbolArray:
4195
4305
  Description: 'Use %i or %I for arrays of symbols.'
4196
4306
  StyleGuide: '#percent-i'