rubocop 1.78.0 → 1.81.6
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.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/config/default.yml +46 -21
- data/exe/rubocop +1 -8
- data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
- data/lib/rubocop/cli.rb +6 -2
- data/lib/rubocop/config_loader.rb +3 -1
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +4 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +7 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -2
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +30 -12
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +0 -5
- data/lib/rubocop/cop/layout/line_length.rb +9 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +8 -4
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +8 -0
- data/lib/rubocop/cop/layout/space_around_keyword.rb +6 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +8 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +13 -7
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +4 -1
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +5 -42
- data/lib/rubocop/cop/lint/empty_interpolation.rb +11 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +12 -0
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +101 -2
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +1 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +6 -5
- data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +1 -0
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +7 -0
- data/lib/rubocop/cop/message_annotator.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +40 -1
- data/lib/rubocop/cop/naming/predicate_method.rb +19 -3
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +13 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +11 -17
- data/lib/rubocop/cop/style/array_intersect.rb +99 -35
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/bitwise_predicate.rb +8 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +8 -4
- data/lib/rubocop/cop/style/dig_chain.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +1 -1
- data/lib/rubocop/cop/style/endless_method.rb +15 -2
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
- data/lib/rubocop/cop/style/it_assignment.rb +69 -12
- data/lib/rubocop/cop/style/it_block_parameter.rb +2 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +1 -3
- data/lib/rubocop/cop/style/map_to_set.rb +1 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +2 -4
- data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +17 -9
- data/lib/rubocop/cop/style/parallel_assignment.rb +32 -20
- data/lib/rubocop/cop/style/redundant_begin.rb +34 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
- data/lib/rubocop/cop/style/redundant_format.rb +26 -5
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_interpolation.rb +11 -2
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +29 -11
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +20 -1
- data/lib/rubocop/cop/style/semicolon.rb +20 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +3 -3
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +30 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +17 -13
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +45 -0
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/utils/format_string.rb +10 -0
- data/lib/rubocop/cop/variable_force/variable.rb +1 -1
- data/lib/rubocop/cop/variable_force.rb +25 -8
- data/lib/rubocop/cops_documentation_generator.rb +5 -4
- data/lib/rubocop/formatter/disabled_config_formatter.rb +18 -5
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -0
- data/lib/rubocop/lsp/diagnostic.rb +21 -20
- data/lib/rubocop/lsp/routes.rb +65 -9
- data/lib/rubocop/lsp/runtime.rb +2 -2
- data/lib/rubocop/lsp/server.rb +2 -2
- data/lib/rubocop/lsp/stdin_runner.rb +0 -16
- data/lib/rubocop/result_cache.rb +14 -12
- data/lib/rubocop/runner.rb +6 -4
- data/lib/rubocop/target_finder.rb +9 -9
- data/lib/rubocop/target_ruby.rb +10 -1
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +3 -0
- data/lib/ruby_lsp/rubocop/addon.rb +23 -8
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +49 -15
- metadata +9 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d82a03998b60107aedc6589884c7edbafdab71312f8328edf17eed92ef26980b
|
|
4
|
+
data.tar.gz: 2ac88da54e9ad3d1b1d51f72391447749b440a8c90602a48b50d35d7767727d8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cde998922977693d608c6a80a4afd9e87605e9f6b673babd8c70824b79602134116f9c090bc222e97ec6dc46254e0a85d7329ebad1aa50465ea8cc36d4636814
|
|
7
|
+
data.tar.gz: ed82346ea82e517fb1381653cc9a2a49ca1a5235df71491996e7b68d3000d137cd1c8ba69819cbd5d40d98440702757008ff69157d1dc7c13c8c6cf9345b5ac3
|
data/README.md
CHANGED
|
@@ -6,8 +6,6 @@
|
|
|
6
6
|
[](https://github.com/rubocop/rubocop)
|
|
7
7
|
[](https://badge.fury.io/rb/rubocop)
|
|
8
8
|
[](https://github.com/rubocop/rubocop/actions/workflows/rubocop.yml)
|
|
9
|
-
[](https://codeclimate.com/github/rubocop/rubocop/test_coverage)
|
|
10
|
-
[](https://codeclimate.com/github/rubocop/rubocop/maintainability)
|
|
11
9
|
[](https://discord.gg/wJjWvGRDmm)
|
|
12
10
|
|
|
13
11
|
> Role models are important. <br/>
|
|
@@ -53,7 +51,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
|
|
|
53
51
|
in your `Gemfile`:
|
|
54
52
|
|
|
55
53
|
```rb
|
|
56
|
-
gem 'rubocop', '~> 1.
|
|
54
|
+
gem 'rubocop', '~> 1.81', require: false
|
|
57
55
|
```
|
|
58
56
|
|
|
59
57
|
See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
|
data/config/default.yml
CHANGED
|
@@ -275,7 +275,7 @@ Gemspec/AddRuntimeDependency:
|
|
|
275
275
|
Description: 'Prefer `add_dependency` over `add_runtime_dependency`.'
|
|
276
276
|
StyleGuide: '#add_dependency_vs_add_runtime_dependency'
|
|
277
277
|
References:
|
|
278
|
-
- https://github.com/
|
|
278
|
+
- https://github.com/ruby/rubygems/issues/7799#issuecomment-2192720316
|
|
279
279
|
Enabled: pending
|
|
280
280
|
VersionAdded: '1.65'
|
|
281
281
|
Include:
|
|
@@ -378,7 +378,7 @@ Gemspec/RubyVersionGlobalsUsage:
|
|
|
378
378
|
#################### Layout ###########################
|
|
379
379
|
|
|
380
380
|
Layout/AccessModifierIndentation:
|
|
381
|
-
Description:
|
|
381
|
+
Description: Checks indentation of private/protected visibility modifiers.
|
|
382
382
|
StyleGuide: '#indent-public-private-protected'
|
|
383
383
|
Enabled: true
|
|
384
384
|
VersionAdded: '0.49'
|
|
@@ -638,6 +638,12 @@ Layout/EmptyLines:
|
|
|
638
638
|
Enabled: true
|
|
639
639
|
VersionAdded: '0.49'
|
|
640
640
|
|
|
641
|
+
Layout/EmptyLinesAfterModuleInclusion:
|
|
642
|
+
Description: 'Keeps track of empty lines after module inclusion methods.'
|
|
643
|
+
StyleGuide: '#empty-lines-after-module-inclusion'
|
|
644
|
+
Enabled: pending
|
|
645
|
+
VersionAdded: '1.79'
|
|
646
|
+
|
|
641
647
|
Layout/EmptyLinesAroundAccessModifier:
|
|
642
648
|
Description: "Keep blank lines around access modifiers."
|
|
643
649
|
StyleGuide: '#empty-lines-around-access-modifier'
|
|
@@ -1051,7 +1057,7 @@ Layout/LeadingCommentSpace:
|
|
|
1051
1057
|
AllowSteepAnnotation: false
|
|
1052
1058
|
|
|
1053
1059
|
Layout/LeadingEmptyLines:
|
|
1054
|
-
Description:
|
|
1060
|
+
Description: Checks for unnecessary blank lines at the beginning of a file.
|
|
1055
1061
|
Enabled: true
|
|
1056
1062
|
VersionAdded: '0.57'
|
|
1057
1063
|
VersionChanged: '0.77'
|
|
@@ -1141,7 +1147,7 @@ Layout/MultilineArrayLineBreaks:
|
|
|
1141
1147
|
AllowMultilineFinalElement: false
|
|
1142
1148
|
|
|
1143
1149
|
Layout/MultilineAssignmentLayout:
|
|
1144
|
-
Description: '
|
|
1150
|
+
Description: 'Checks for a newline after the assignment operator in multi-line assignments.'
|
|
1145
1151
|
StyleGuide: '#indent-conditional-assignment'
|
|
1146
1152
|
Enabled: false
|
|
1147
1153
|
VersionAdded: '0.49'
|
|
@@ -1655,7 +1661,7 @@ Lint/BinaryOperatorWithIdenticalOperands:
|
|
|
1655
1661
|
VersionChanged: '1.69'
|
|
1656
1662
|
|
|
1657
1663
|
Lint/BooleanSymbol:
|
|
1658
|
-
Description: '
|
|
1664
|
+
Description: 'Checks for `:true` and `:false` symbols.'
|
|
1659
1665
|
Enabled: true
|
|
1660
1666
|
SafeAutoCorrect: false
|
|
1661
1667
|
VersionAdded: '0.50'
|
|
@@ -1688,7 +1694,7 @@ Lint/ConstantReassignment:
|
|
|
1688
1694
|
VersionAdded: '1.70'
|
|
1689
1695
|
|
|
1690
1696
|
Lint/ConstantResolution:
|
|
1691
|
-
Description: '
|
|
1697
|
+
Description: 'Checks that constants are fully qualified with `::`.'
|
|
1692
1698
|
Enabled: false
|
|
1693
1699
|
VersionAdded: '0.86'
|
|
1694
1700
|
# Restrict this cop to only looking at certain names
|
|
@@ -1702,7 +1708,7 @@ Lint/CopDirectiveSyntax:
|
|
|
1702
1708
|
VersionAdded: '1.72'
|
|
1703
1709
|
|
|
1704
1710
|
Lint/Debugger:
|
|
1705
|
-
Description: '
|
|
1711
|
+
Description: 'Checks for debugger calls.'
|
|
1706
1712
|
Enabled: true
|
|
1707
1713
|
VersionAdded: '0.14'
|
|
1708
1714
|
VersionChanged: '1.63'
|
|
@@ -1753,7 +1759,7 @@ Lint/Debugger:
|
|
|
1753
1759
|
- debug/start
|
|
1754
1760
|
|
|
1755
1761
|
Lint/DeprecatedClassMethods:
|
|
1756
|
-
Description: '
|
|
1762
|
+
Description: 'Checks for deprecated class method calls.'
|
|
1757
1763
|
Enabled: true
|
|
1758
1764
|
VersionAdded: '0.19'
|
|
1759
1765
|
|
|
@@ -1827,13 +1833,13 @@ Lint/DuplicateElsifCondition:
|
|
|
1827
1833
|
VersionAdded: '0.88'
|
|
1828
1834
|
|
|
1829
1835
|
Lint/DuplicateHashKey:
|
|
1830
|
-
Description: '
|
|
1836
|
+
Description: 'Checks for duplicate keys in hash literals.'
|
|
1831
1837
|
Enabled: true
|
|
1832
1838
|
VersionAdded: '0.34'
|
|
1833
1839
|
VersionChanged: '0.77'
|
|
1834
1840
|
|
|
1835
1841
|
Lint/DuplicateMagicComment:
|
|
1836
|
-
Description: '
|
|
1842
|
+
Description: 'Checks for duplicated magic comments.'
|
|
1837
1843
|
Enabled: pending
|
|
1838
1844
|
VersionAdded: '1.37'
|
|
1839
1845
|
|
|
@@ -1843,7 +1849,7 @@ Lint/DuplicateMatchPattern:
|
|
|
1843
1849
|
VersionAdded: '1.50'
|
|
1844
1850
|
|
|
1845
1851
|
Lint/DuplicateMethods:
|
|
1846
|
-
Description: '
|
|
1852
|
+
Description: 'Checks for duplicate method definitions.'
|
|
1847
1853
|
Enabled: true
|
|
1848
1854
|
VersionAdded: '0.29'
|
|
1849
1855
|
|
|
@@ -1853,7 +1859,7 @@ Lint/DuplicateRegexpCharacterClassElement:
|
|
|
1853
1859
|
VersionAdded: '1.1'
|
|
1854
1860
|
|
|
1855
1861
|
Lint/DuplicateRequire:
|
|
1856
|
-
Description: '
|
|
1862
|
+
Description: 'Checks for duplicate `require`s and `require_relative`s.'
|
|
1857
1863
|
Enabled: true
|
|
1858
1864
|
SafeAutoCorrect: false
|
|
1859
1865
|
VersionAdded: '0.90'
|
|
@@ -1870,12 +1876,12 @@ Lint/DuplicateSetElement:
|
|
|
1870
1876
|
VersionAdded: '1.67'
|
|
1871
1877
|
|
|
1872
1878
|
Lint/EachWithObjectArgument:
|
|
1873
|
-
Description: '
|
|
1879
|
+
Description: 'Checks for immutable argument given to each_with_object.'
|
|
1874
1880
|
Enabled: true
|
|
1875
1881
|
VersionAdded: '0.31'
|
|
1876
1882
|
|
|
1877
1883
|
Lint/ElseLayout:
|
|
1878
|
-
Description: '
|
|
1884
|
+
Description: 'Checks for odd code arrangement in an else block.'
|
|
1879
1885
|
Enabled: true
|
|
1880
1886
|
VersionAdded: '0.17'
|
|
1881
1887
|
VersionChanged: '1.2'
|
|
@@ -2278,6 +2284,7 @@ Lint/RedundantSafeNavigation:
|
|
|
2278
2284
|
Description: 'Checks for redundant safe navigation calls.'
|
|
2279
2285
|
Enabled: true
|
|
2280
2286
|
VersionAdded: '0.93'
|
|
2287
|
+
VersionChanged: '1.79'
|
|
2281
2288
|
AllowedMethods:
|
|
2282
2289
|
- instance_of?
|
|
2283
2290
|
- kind_of?
|
|
@@ -2285,6 +2292,12 @@ Lint/RedundantSafeNavigation:
|
|
|
2285
2292
|
- eql?
|
|
2286
2293
|
- respond_to?
|
|
2287
2294
|
- equal?
|
|
2295
|
+
InferNonNilReceiver: false
|
|
2296
|
+
AdditionalNilMethods:
|
|
2297
|
+
- present?
|
|
2298
|
+
- blank?
|
|
2299
|
+
- try
|
|
2300
|
+
- try!
|
|
2288
2301
|
Safe: false
|
|
2289
2302
|
|
|
2290
2303
|
Lint/RedundantSplatExpansion:
|
|
@@ -2817,7 +2830,7 @@ Migration/DepartmentName:
|
|
|
2817
2830
|
#################### Naming ##############################
|
|
2818
2831
|
|
|
2819
2832
|
Naming/AccessorMethodName:
|
|
2820
|
-
Description:
|
|
2833
|
+
Description: Checks the naming of accessor methods for get_/set_.
|
|
2821
2834
|
StyleGuide: '#accessor_mutator_method_names'
|
|
2822
2835
|
Enabled: true
|
|
2823
2836
|
VersionAdded: '0.50'
|
|
@@ -3194,6 +3207,7 @@ Security/JSONLoad:
|
|
|
3194
3207
|
security issues. See reference for more information.
|
|
3195
3208
|
References:
|
|
3196
3209
|
- 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load'
|
|
3210
|
+
- 'https://bugs.ruby-lang.org/issues/19528'
|
|
3197
3211
|
Enabled: true
|
|
3198
3212
|
VersionAdded: '0.43'
|
|
3199
3213
|
VersionChanged: '1.22'
|
|
@@ -3328,6 +3342,12 @@ Style/ArrayIntersect:
|
|
|
3328
3342
|
Safe: false
|
|
3329
3343
|
VersionAdded: '1.40'
|
|
3330
3344
|
|
|
3345
|
+
Style/ArrayIntersectWithSingleElement:
|
|
3346
|
+
Description: 'Use `include?(element)` instead of `intersect?([element])`.'
|
|
3347
|
+
Enabled: 'pending'
|
|
3348
|
+
Safe: false
|
|
3349
|
+
VersionAdded: '1.81'
|
|
3350
|
+
|
|
3331
3351
|
Style/ArrayJoin:
|
|
3332
3352
|
Description: 'Use Array#join instead of Array#*.'
|
|
3333
3353
|
StyleGuide: '#array-join'
|
|
@@ -4224,7 +4244,7 @@ Style/GlobalVars:
|
|
|
4224
4244
|
AllowedVariables: []
|
|
4225
4245
|
|
|
4226
4246
|
Style/GuardClause:
|
|
4227
|
-
Description: '
|
|
4247
|
+
Description: 'Checks for conditionals that can be replaced with guard clauses.'
|
|
4228
4248
|
StyleGuide: '#no-nested-conditionals'
|
|
4229
4249
|
Enabled: true
|
|
4230
4250
|
VersionAdded: '0.20'
|
|
@@ -4486,7 +4506,7 @@ Style/IpAddresses:
|
|
|
4486
4506
|
- '**/*.gemspec'
|
|
4487
4507
|
|
|
4488
4508
|
Style/ItAssignment:
|
|
4489
|
-
Description: 'Checks for
|
|
4509
|
+
Description: 'Checks for local variables and method parameters named `it`.'
|
|
4490
4510
|
Enabled: pending
|
|
4491
4511
|
VersionAdded: '1.70'
|
|
4492
4512
|
|
|
@@ -4533,8 +4553,9 @@ Style/LambdaCall:
|
|
|
4533
4553
|
Description: 'Use lambda.call(...) instead of lambda.(...).'
|
|
4534
4554
|
StyleGuide: '#proc-call'
|
|
4535
4555
|
Enabled: true
|
|
4556
|
+
AutoCorrect: contextual
|
|
4536
4557
|
VersionAdded: '0.13'
|
|
4537
|
-
VersionChanged: '
|
|
4558
|
+
VersionChanged: '<<next>>'
|
|
4538
4559
|
EnforcedStyle: call
|
|
4539
4560
|
SupportedStyles:
|
|
4540
4561
|
- call
|
|
@@ -5187,7 +5208,7 @@ Style/RandomWithOffset:
|
|
|
5187
5208
|
VersionAdded: '0.52'
|
|
5188
5209
|
|
|
5189
5210
|
Style/RedundantArgument:
|
|
5190
|
-
Description: '
|
|
5211
|
+
Description: 'Checks for a redundant argument passed to certain methods.'
|
|
5191
5212
|
Enabled: pending
|
|
5192
5213
|
Safe: false
|
|
5193
5214
|
VersionAdded: '1.4'
|
|
@@ -5348,7 +5369,7 @@ Style/RedundantInterpolationUnfreeze:
|
|
|
5348
5369
|
VersionAdded: '1.66'
|
|
5349
5370
|
|
|
5350
5371
|
Style/RedundantLineContinuation:
|
|
5351
|
-
Description: '
|
|
5372
|
+
Description: 'Checks for redundant line continuation.'
|
|
5352
5373
|
Enabled: pending
|
|
5353
5374
|
VersionAdded: '1.49'
|
|
5354
5375
|
|
|
@@ -5642,7 +5663,7 @@ Style/SpecialGlobalVars:
|
|
|
5642
5663
|
- use_builtin_english_names
|
|
5643
5664
|
|
|
5644
5665
|
Style/StabbyLambdaParentheses:
|
|
5645
|
-
Description: '
|
|
5666
|
+
Description: 'Checks for the usage of parentheses around stabby lambda arguments.'
|
|
5646
5667
|
StyleGuide: '#stabby-lambda-with-args'
|
|
5647
5668
|
Enabled: true
|
|
5648
5669
|
VersionAdded: '0.35'
|
|
@@ -5831,10 +5852,14 @@ Style/TrailingCommaInArguments:
|
|
|
5831
5852
|
# parenthesized method calls where each argument is on its own line.
|
|
5832
5853
|
# If `consistent_comma`, the cop requires a comma after the last argument,
|
|
5833
5854
|
# for all parenthesized method calls with arguments.
|
|
5855
|
+
# If `diff_comma`, the cop requires a comma after the last argument, but only
|
|
5856
|
+
# when that argument is followed by an immediate newline, even if
|
|
5857
|
+
# there is an inline comment.
|
|
5834
5858
|
EnforcedStyleForMultiline: no_comma
|
|
5835
5859
|
SupportedStylesForMultiline:
|
|
5836
5860
|
- comma
|
|
5837
5861
|
- consistent_comma
|
|
5862
|
+
- diff_comma
|
|
5838
5863
|
- no_comma
|
|
5839
5864
|
|
|
5840
5865
|
Style/TrailingCommaInArrayLiteral:
|
data/exe/rubocop
CHANGED
|
@@ -12,13 +12,6 @@ if RuboCop::Server.running?
|
|
|
12
12
|
exit_status = RuboCop::Server::ClientCommand::Exec.new.run
|
|
13
13
|
else
|
|
14
14
|
require 'rubocop'
|
|
15
|
-
|
|
16
|
-
cli = RuboCop::CLI.new
|
|
17
|
-
|
|
18
|
-
time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
19
|
-
exit_status = cli.run
|
|
20
|
-
elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
|
|
21
|
-
|
|
22
|
-
puts "Finished in #{elapsed_time} seconds" if cli.options[:debug] || cli.options[:display_time]
|
|
15
|
+
exit_status = RuboCop::CLI.new.run
|
|
23
16
|
end
|
|
24
17
|
exit exit_status
|
|
@@ -83,7 +83,7 @@ module RuboCop
|
|
|
83
83
|
execute_runner
|
|
84
84
|
@options.delete(:only)
|
|
85
85
|
@config_store = ConfigStore.new
|
|
86
|
-
@config_store.
|
|
86
|
+
@config_store.apply_options!(@options)
|
|
87
87
|
# Save the todo configuration of the LineLength cop.
|
|
88
88
|
File.read(AUTO_GENERATED_FILE).lines.drop_while { |line| line.start_with?('#') }.join
|
|
89
89
|
end
|
|
@@ -99,7 +99,7 @@ module RuboCop
|
|
|
99
99
|
|
|
100
100
|
def reset_config_and_auto_gen_file
|
|
101
101
|
@config_store = ConfigStore.new
|
|
102
|
-
@config_store.
|
|
102
|
+
@config_store.apply_options!(@options)
|
|
103
103
|
File.open(AUTO_GENERATED_FILE, 'w') {} # create or truncate if exists
|
|
104
104
|
add_inheritance_from_auto_generated_file(@options[:config])
|
|
105
105
|
end
|
data/lib/rubocop/cli.rb
CHANGED
|
@@ -37,6 +37,8 @@ module RuboCop
|
|
|
37
37
|
#
|
|
38
38
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
39
39
|
def run(args = ARGV)
|
|
40
|
+
time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
41
|
+
|
|
40
42
|
@options, paths = Options.new.parse(args)
|
|
41
43
|
@env = Environment.new(@options, @config_store, paths)
|
|
42
44
|
|
|
@@ -72,6 +74,9 @@ module RuboCop
|
|
|
72
74
|
warn e.message
|
|
73
75
|
warn e.backtrace
|
|
74
76
|
STATUS_ERROR
|
|
77
|
+
ensure
|
|
78
|
+
elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
|
|
79
|
+
puts "Finished in #{elapsed_time} seconds" if @options[:debug] || @options[:display_time]
|
|
75
80
|
end
|
|
76
81
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
77
82
|
|
|
@@ -159,8 +164,7 @@ module RuboCop
|
|
|
159
164
|
set_options_to_pending_cops_reporter
|
|
160
165
|
handle_editor_mode
|
|
161
166
|
|
|
162
|
-
@config_store.
|
|
163
|
-
@config_store.force_default_config! if @options[:force_default_config]
|
|
167
|
+
@config_store.apply_options!(@options)
|
|
164
168
|
|
|
165
169
|
handle_exiting_options
|
|
166
170
|
|
|
@@ -75,7 +75,9 @@ module RuboCop
|
|
|
75
75
|
|
|
76
76
|
puts "configuration from #{absolute_path}" if debug?
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
unless hash.is_a?(Hash)
|
|
79
|
+
raise(ValidationError, "Malformed configuration in #{absolute_path}")
|
|
80
|
+
end
|
|
79
81
|
|
|
80
82
|
hash
|
|
81
83
|
end
|
data/lib/rubocop/config_store.rb
CHANGED
|
@@ -25,6 +25,11 @@ module RuboCop
|
|
|
25
25
|
@validated = true
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
+
def apply_options!(options)
|
|
29
|
+
self.options_config = options[:config] if options[:config]
|
|
30
|
+
force_default_config! if options[:force_default_config]
|
|
31
|
+
end
|
|
32
|
+
|
|
28
33
|
def options_config=(options_config)
|
|
29
34
|
loaded_config = ConfigLoader.load_file(options_config)
|
|
30
35
|
@options_config = ConfigLoader.merge_with_default(loaded_config, options_config)
|
|
@@ -35,8 +35,8 @@ module RuboCop
|
|
|
35
35
|
# `false` is the same as `disabled` for backward compatibility.
|
|
36
36
|
return false if ['disabled', false].include?(cop_config['AutoCorrect'])
|
|
37
37
|
|
|
38
|
-
# When LSP is enabled, it is considered as editing
|
|
39
|
-
# and autocorrection with `AutoCorrect: contextual` will not be performed.
|
|
38
|
+
# When LSP is enabled or the `--editor-mode` option is on, it is considered as editing
|
|
39
|
+
# source code, and autocorrection with `AutoCorrect: contextual` will not be performed.
|
|
40
40
|
return false if contextual_autocorrect? && LSP.enabled?
|
|
41
41
|
|
|
42
42
|
# :safe_autocorrect is a derived option based on several command-line
|
|
@@ -94,7 +94,7 @@ module RuboCop
|
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def surrounding_heredoc?(node)
|
|
97
|
-
node.
|
|
97
|
+
node.any_str_type? && node.heredoc?
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
def heredoc_range(node)
|
|
@@ -106,7 +106,7 @@ module RuboCop
|
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def string_continuation?(node)
|
|
109
|
-
node.
|
|
109
|
+
node.any_str_type? && node.source.match?(/\\\s*$/)
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
def multiline_string?(node)
|
|
@@ -29,10 +29,13 @@ module RuboCop
|
|
|
29
29
|
def align_end(corrector, processed_source, node, align_to)
|
|
30
30
|
@processed_source = processed_source
|
|
31
31
|
whitespace = whitespace_range(node)
|
|
32
|
-
return false unless whitespace.source.strip.empty?
|
|
33
|
-
|
|
34
32
|
column = alignment_column(align_to)
|
|
35
|
-
|
|
33
|
+
|
|
34
|
+
if whitespace.source.strip.empty?
|
|
35
|
+
corrector.replace(whitespace, ' ' * column)
|
|
36
|
+
else
|
|
37
|
+
corrector.insert_after(whitespace, "\n#{' ' * column}")
|
|
38
|
+
end
|
|
36
39
|
end
|
|
37
40
|
|
|
38
41
|
private
|
|
@@ -54,7 +57,7 @@ module RuboCop
|
|
|
54
57
|
def inside_string_ranges(node)
|
|
55
58
|
return [] unless node.is_a?(Parser::AST::Node)
|
|
56
59
|
|
|
57
|
-
node.each_node(:
|
|
60
|
+
node.each_node(:any_str).filter_map { |n| inside_string_range(n) }
|
|
58
61
|
end
|
|
59
62
|
|
|
60
63
|
def inside_string_range(node)
|
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
|
6
6
|
class ForToEachCorrector
|
|
7
7
|
extend NodePattern::Macros
|
|
8
8
|
|
|
9
|
-
CORRECTION = '%<collection>s
|
|
9
|
+
CORRECTION = '%<collection>s%<dot>seach do |%<argument>s|'
|
|
10
10
|
|
|
11
11
|
def initialize(for_node)
|
|
12
12
|
@for_node = for_node
|
|
@@ -25,7 +25,12 @@ module RuboCop
|
|
|
25
25
|
attr_reader :for_node, :variable_node, :collection_node
|
|
26
26
|
|
|
27
27
|
def correction
|
|
28
|
-
format(
|
|
28
|
+
format(
|
|
29
|
+
CORRECTION,
|
|
30
|
+
collection: collection_source,
|
|
31
|
+
dot: collection_node.csend_type? ? '&.' : '.',
|
|
32
|
+
argument: variable_node.source
|
|
33
|
+
)
|
|
29
34
|
end
|
|
30
35
|
|
|
31
36
|
def collection_source
|
|
@@ -30,6 +30,8 @@ module RuboCop
|
|
|
30
30
|
any_block: %i[block numblock itblock],
|
|
31
31
|
any_def: %i[def defs],
|
|
32
32
|
any_match_pattern: %i[match_pattern match_pattern_p],
|
|
33
|
+
any_str: %i[str dstr xstr],
|
|
34
|
+
any_sym: %i[sym dsym],
|
|
33
35
|
argument: %i[arg optarg restarg kwarg kwoptarg kwrestarg blockarg forward_arg shadowarg],
|
|
34
36
|
boolean: %i[true false],
|
|
35
37
|
call: %i[send csend],
|
|
@@ -210,7 +212,7 @@ module RuboCop
|
|
|
210
212
|
# A heredoc can be a `dstr` without interpolation, but if there is interpolation
|
|
211
213
|
# there'll be a `begin` node, in which case, we cannot evaluate the pattern.
|
|
212
214
|
def acceptable_heredoc?(node)
|
|
213
|
-
node.
|
|
215
|
+
node.any_str_type? && node.heredoc? && node.each_child_node(:begin).none?
|
|
214
216
|
end
|
|
215
217
|
|
|
216
218
|
def process_pattern(pattern_node)
|
|
@@ -66,8 +66,9 @@ module RuboCop
|
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def autocorrect_to_explicit_predicate(corrector, node, group_name)
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
range = node.loc.selector.begin.join(node.source_range.end)
|
|
70
|
+
|
|
71
|
+
corrector.replace(range, "#{group_name}_type?")
|
|
71
72
|
end
|
|
72
73
|
|
|
73
74
|
def autocorrect_keep_method(corrector, symbol_args, group_name, group_types)
|
|
@@ -76,7 +76,7 @@ module RuboCop
|
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def on_send(node) # rubocop:disable InternalAffairs/OnSendWithoutOnCSend
|
|
79
|
-
new_identifier = node.first_argument
|
|
79
|
+
return unless (new_identifier = node.first_argument)
|
|
80
80
|
return unless new_identifier.basic_literal?
|
|
81
81
|
|
|
82
82
|
new_identifier = new_identifier.value
|
|
@@ -76,28 +76,40 @@ module RuboCop
|
|
|
76
76
|
# # good
|
|
77
77
|
# class ErrorA < BaseError; end
|
|
78
78
|
# class ErrorB < BaseError; end
|
|
79
|
-
# class ErrorC < BaseError; end
|
|
80
79
|
#
|
|
81
80
|
# # good
|
|
82
81
|
# class ErrorA < BaseError; end
|
|
83
82
|
#
|
|
84
83
|
# class ErrorB < BaseError; end
|
|
85
84
|
#
|
|
86
|
-
#
|
|
85
|
+
# # good - DefLikeMacros: [memoize]
|
|
86
|
+
# memoize :attribute_a
|
|
87
|
+
# memoize :attribute_b
|
|
88
|
+
#
|
|
89
|
+
# # good
|
|
90
|
+
# memoize :attribute_a
|
|
91
|
+
#
|
|
92
|
+
# memoize :attribute_b
|
|
87
93
|
#
|
|
88
94
|
# @example AllowAdjacentOneLineDefs: false
|
|
89
95
|
#
|
|
90
96
|
# # bad
|
|
91
97
|
# class ErrorA < BaseError; end
|
|
92
98
|
# class ErrorB < BaseError; end
|
|
93
|
-
# class ErrorC < BaseError; end
|
|
94
99
|
#
|
|
95
100
|
# # good
|
|
96
101
|
# class ErrorA < BaseError; end
|
|
97
102
|
#
|
|
98
103
|
# class ErrorB < BaseError; end
|
|
99
104
|
#
|
|
100
|
-
#
|
|
105
|
+
# # bad - DefLikeMacros: [memoize]
|
|
106
|
+
# memoize :attribute_a
|
|
107
|
+
# memoize :attribute_b
|
|
108
|
+
#
|
|
109
|
+
# # good
|
|
110
|
+
# memoize :attribute_a
|
|
111
|
+
#
|
|
112
|
+
# memoize :attribute_b
|
|
101
113
|
#
|
|
102
114
|
class EmptyLineBetweenDefs < Base
|
|
103
115
|
include RangeHelp
|
|
@@ -158,6 +170,8 @@ module RuboCop
|
|
|
158
170
|
def def_location(correction_node)
|
|
159
171
|
if correction_node.any_block_type?
|
|
160
172
|
correction_node.source_range.join(correction_node.children.first.source_range)
|
|
173
|
+
elsif correction_node.send_type?
|
|
174
|
+
correction_node.source_range
|
|
161
175
|
else
|
|
162
176
|
correction_node.loc.keyword.join(correction_node.loc.name)
|
|
163
177
|
end
|
|
@@ -175,8 +189,14 @@ module RuboCop
|
|
|
175
189
|
end
|
|
176
190
|
|
|
177
191
|
def macro_candidate?(node)
|
|
178
|
-
|
|
179
|
-
|
|
192
|
+
macro_candidate = if node.any_block_type?
|
|
193
|
+
node.send_node
|
|
194
|
+
elsif node.send_type?
|
|
195
|
+
node
|
|
196
|
+
end
|
|
197
|
+
return false unless macro_candidate
|
|
198
|
+
|
|
199
|
+
macro_candidate.macro? && empty_line_between_macros.include?(macro_candidate.method_name)
|
|
180
200
|
end
|
|
181
201
|
|
|
182
202
|
def method_candidate?(node)
|
|
@@ -240,7 +260,9 @@ module RuboCop
|
|
|
240
260
|
end
|
|
241
261
|
|
|
242
262
|
def def_start(node)
|
|
243
|
-
|
|
263
|
+
node = node.send_node if node.any_block_type?
|
|
264
|
+
|
|
265
|
+
if node.send_type?
|
|
244
266
|
node.source_range.line
|
|
245
267
|
else
|
|
246
268
|
node.loc.keyword.line
|
|
@@ -252,11 +274,7 @@ module RuboCop
|
|
|
252
274
|
end
|
|
253
275
|
|
|
254
276
|
def end_loc(node)
|
|
255
|
-
|
|
256
|
-
node.source_range.end
|
|
257
|
-
else
|
|
258
|
-
node.loc.end
|
|
259
|
-
end
|
|
277
|
+
node.source_range.end
|
|
260
278
|
end
|
|
261
279
|
|
|
262
280
|
def autocorrect_remove_lines(corrector, newline_pos, count)
|