rubocop 1.43.0 → 1.45.1
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 -1
- data/config/default.yml +64 -29
- data/lib/rubocop/cli.rb +54 -8
- data/lib/rubocop/config_loader.rb +12 -15
- data/lib/rubocop/config_loader_resolver.rb +3 -4
- data/lib/rubocop/cop/base.rb +27 -9
- data/lib/rubocop/cop/commissioner.rb +8 -2
- data/lib/rubocop/cop/cop.rb +23 -3
- data/lib/rubocop/cop/corrector.rb +10 -2
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -6
- data/lib/rubocop/cop/gemspec/development_dependencies.rb +107 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +11 -3
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_end_newline.rb +7 -1
- data/lib/rubocop/cop/layout/class_structure.rb +2 -16
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +2 -6
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +6 -9
- data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +11 -13
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +4 -4
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +5 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +4 -0
- data/lib/rubocop/cop/lint/debugger.rb +8 -27
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +62 -112
- data/lib/rubocop/cop/lint/else_layout.rb +2 -6
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +14 -7
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +15 -17
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +8 -5
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +11 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +7 -4
- data/lib/rubocop/cop/lint/useless_method_definition.rb +3 -3
- data/lib/rubocop/cop/lint/useless_rescue.rb +15 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +9 -1
- data/lib/rubocop/cop/lint/void.rb +19 -10
- data/lib/rubocop/cop/metrics/block_length.rb +1 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +2 -5
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +3 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +5 -3
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +51 -25
- data/lib/rubocop/cop/mixin/line_length_help.rb +3 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -3
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +4 -0
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/registry.rb +12 -7
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -11
- data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +8 -2
- data/lib/rubocop/cop/style/class_and_module_children.rb +3 -10
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/comparable_clamp.rb +125 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +0 -6
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/documentation_method.rb +6 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +114 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +11 -5
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +2 -0
- data/lib/rubocop/cop/style/min_max_comparison.rb +11 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +0 -4
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +18 -3
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +1 -5
- data/lib/rubocop/cop/style/numbered_parameters_limit.rb +11 -3
- data/lib/rubocop/cop/style/one_line_conditional.rb +3 -6
- data/lib/rubocop/cop/style/operator_method_call.rb +2 -2
- data/lib/rubocop/cop/style/parallel_assignment.rb +3 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +16 -1
- data/lib/rubocop/cop/style/redundant_conditional.rb +0 -4
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +16 -10
- data/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb +58 -0
- data/lib/rubocop/cop/style/require_order.rb +2 -9
- data/lib/rubocop/cop/style/self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/semicolon.rb +24 -2
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +12 -5
- data/lib/rubocop/cop/style/yoda_expression.rb +11 -2
- data/lib/rubocop/cop/team.rb +19 -14
- data/lib/rubocop/cop/variable_force/scope.rb +3 -3
- data/lib/rubocop/cop/variable_force/variable_table.rb +3 -1
- data/lib/rubocop/cop/variable_force.rb +1 -1
- data/lib/rubocop/formatter.rb +0 -1
- data/lib/rubocop/options.rb +22 -1
- data/lib/rubocop/rspec/expect_offense.rb +6 -4
- data/lib/rubocop/runner.rb +40 -4
- data/lib/rubocop/server/cache.rb +10 -3
- data/lib/rubocop/server/cli.rb +37 -18
- data/lib/rubocop/server/client_command/exec.rb +1 -1
- data/lib/rubocop/server/client_command/start.rb +6 -1
- data/lib/rubocop/server/core.rb +23 -8
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +4 -0
- metadata +11 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 648a8aa3156aebf0c078bc0b600f301d3aa0abaf92d6b3643c343718575f7302
|
4
|
+
data.tar.gz: 21b185886d70b70a163c6e7f3ea47e04ee0a0afcf11217e0d7bcb31e25440880
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff5a5e947001ba9507f3e806896559baaf0e4bccc6b2cc56316dffc3ae334f62046040be389518139d2979c4d09900600f9b233bc1f4dbd2d1d37a2f8fe99037
|
7
|
+
data.tar.gz: 8f89f55198c9d206c5b8d0c32cbeb5033491046c0ea0f4311f6c1a23595bcce852ec732606ca1fd2bc499b31ecb2265dcf6d85edd352f6400d01bd9385993a44
|
data/README.md
CHANGED
@@ -53,7 +53,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
|
|
53
53
|
in your `Gemfile`:
|
54
54
|
|
55
55
|
```rb
|
56
|
-
gem 'rubocop', '~> 1.
|
56
|
+
gem 'rubocop', '~> 1.45', require: false
|
57
57
|
```
|
58
58
|
|
59
59
|
See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
|
data/config/default.yml
CHANGED
@@ -262,6 +262,21 @@ Gemspec/DeprecatedAttributeAssignment:
|
|
262
262
|
Include:
|
263
263
|
- '**/*.gemspec'
|
264
264
|
|
265
|
+
Gemspec/DevelopmentDependencies:
|
266
|
+
Description: Checks that development dependencies are specified in Gemfile rather than gemspec.
|
267
|
+
Enabled: pending
|
268
|
+
VersionAdded: '1.44'
|
269
|
+
EnforcedStyle: Gemfile
|
270
|
+
SupportedStyles:
|
271
|
+
- Gemfile
|
272
|
+
- gems.rb
|
273
|
+
- gemspec
|
274
|
+
AllowedGems: []
|
275
|
+
Include:
|
276
|
+
- '**/*.gemspec'
|
277
|
+
- '**/Gemfile'
|
278
|
+
- '**/gems.rb'
|
279
|
+
|
265
280
|
Gemspec/DuplicatedAssignment:
|
266
281
|
Description: 'An attribute assignment method calls should be listed only once in a gemspec.'
|
267
282
|
Enabled: true
|
@@ -391,9 +406,8 @@ Layout/AssignmentIndentation:
|
|
391
406
|
Checks the indentation of the first line of the
|
392
407
|
right-hand-side of a multi-line assignment.
|
393
408
|
Enabled: true
|
394
|
-
SafeAutoCorrect: false
|
395
409
|
VersionAdded: '0.49'
|
396
|
-
VersionChanged: '1.
|
410
|
+
VersionChanged: '1.45'
|
397
411
|
# By default the indentation width from `Layout/IndentationWidth` is used,
|
398
412
|
# but it can be overridden by setting this parameter.
|
399
413
|
IndentationWidth: ~
|
@@ -964,7 +978,6 @@ Layout/IndentationWidth:
|
|
964
978
|
# Number of spaces for each indentation level.
|
965
979
|
Width: 2
|
966
980
|
AllowedPatterns: []
|
967
|
-
IgnoredPatterns: [] # deprecated
|
968
981
|
|
969
982
|
Layout/InitialIndentation:
|
970
983
|
Description: >-
|
@@ -992,10 +1005,8 @@ Layout/LineContinuationLeadingSpace:
|
|
992
1005
|
Use trailing spaces instead of leading spaces in strings
|
993
1006
|
broken over multiple lines (by a backslash).
|
994
1007
|
Enabled: pending
|
995
|
-
AutoCorrect: false
|
996
|
-
SafeAutoCorrect: false
|
997
1008
|
VersionAdded: '1.31'
|
998
|
-
VersionChanged: '1.
|
1009
|
+
VersionChanged: '1.45'
|
999
1010
|
EnforcedStyle: trailing
|
1000
1011
|
SupportedStyles:
|
1001
1012
|
- leading
|
@@ -1047,7 +1058,6 @@ Layout/LineLength:
|
|
1047
1058
|
# elements. Strings will be converted to Regexp objects. A line that matches
|
1048
1059
|
# any regular expression listed in this option will be ignored by LineLength.
|
1049
1060
|
AllowedPatterns: []
|
1050
|
-
IgnoredPatterns: [] # deprecated
|
1051
1061
|
|
1052
1062
|
Layout/MultilineArrayBraceLayout:
|
1053
1063
|
Description: >-
|
@@ -1526,7 +1536,6 @@ Lint/AmbiguousBlockAssociation:
|
|
1526
1536
|
VersionChanged: '1.13'
|
1527
1537
|
AllowedMethods: []
|
1528
1538
|
AllowedPatterns: []
|
1529
|
-
IgnoredMethods: [] # deprecated
|
1530
1539
|
|
1531
1540
|
Lint/AmbiguousOperator:
|
1532
1541
|
Description: >-
|
@@ -1563,7 +1572,9 @@ Lint/AssignmentInCondition:
|
|
1563
1572
|
Description: "Don't use assignment in conditions."
|
1564
1573
|
StyleGuide: '#safe-assignment-in-condition'
|
1565
1574
|
Enabled: true
|
1575
|
+
SafeAutoCorrect: false
|
1566
1576
|
VersionAdded: '0.9'
|
1577
|
+
VersionChanged: '1.45'
|
1567
1578
|
AllowSafeAssignment: true
|
1568
1579
|
|
1569
1580
|
Lint/BigDecimalNew:
|
@@ -1620,12 +1631,12 @@ Lint/Debugger:
|
|
1620
1631
|
Enabled: true
|
1621
1632
|
VersionAdded: '0.14'
|
1622
1633
|
VersionChanged: '1.10'
|
1623
|
-
DebuggerReceivers: [] # deprecated
|
1624
1634
|
DebuggerMethods:
|
1625
1635
|
# Groups are available so that a specific group can be disabled in
|
1626
1636
|
# a user's configuration, but are otherwise not significant.
|
1627
1637
|
Kernel:
|
1628
1638
|
- binding.irb
|
1639
|
+
- p
|
1629
1640
|
- Kernel.binding.irb
|
1630
1641
|
Byebug:
|
1631
1642
|
- byebug
|
@@ -1635,6 +1646,9 @@ Lint/Debugger:
|
|
1635
1646
|
Capybara:
|
1636
1647
|
- save_and_open_page
|
1637
1648
|
- save_and_open_screenshot
|
1649
|
+
PP:
|
1650
|
+
- PP.pp
|
1651
|
+
- pp
|
1638
1652
|
debug.rb:
|
1639
1653
|
- binding.b
|
1640
1654
|
- binding.break
|
@@ -2037,7 +2051,6 @@ Lint/NumberConversion:
|
|
2037
2051
|
SafeAutoCorrect: false
|
2038
2052
|
AllowedMethods: []
|
2039
2053
|
AllowedPatterns: []
|
2040
|
-
IgnoredMethods: [] # deprecated
|
2041
2054
|
IgnoredClasses:
|
2042
2055
|
- Time
|
2043
2056
|
- DateTime
|
@@ -2388,7 +2401,6 @@ Lint/UnreachableLoop:
|
|
2388
2401
|
# RSpec uses `times` in its message expectations
|
2389
2402
|
# eg. `exactly(2).times`
|
2390
2403
|
- !ruby/regexp /(exactly|at_least|at_most)\(\d+\)\.times/
|
2391
|
-
IgnoredPatterns: [] # deprecated
|
2392
2404
|
|
2393
2405
|
Lint/UnusedBlockArgument:
|
2394
2406
|
Description: 'Checks for unused block arguments.'
|
@@ -2498,7 +2510,6 @@ Metrics/AbcSize:
|
|
2498
2510
|
# a Float.
|
2499
2511
|
AllowedMethods: []
|
2500
2512
|
AllowedPatterns: []
|
2501
|
-
IgnoredMethods: [] # deprecated
|
2502
2513
|
CountRepeatedAttributes: true
|
2503
2514
|
Max: 17
|
2504
2515
|
|
@@ -2510,13 +2521,11 @@ Metrics/BlockLength:
|
|
2510
2521
|
CountComments: false # count full line comments?
|
2511
2522
|
Max: 25
|
2512
2523
|
CountAsOne: []
|
2513
|
-
ExcludedMethods: [] # deprecated, retained for backwards compatibility
|
2514
2524
|
AllowedMethods:
|
2515
2525
|
# By default, exclude the `#refine` method, as it tends to have larger
|
2516
2526
|
# associated blocks.
|
2517
2527
|
- refine
|
2518
2528
|
AllowedPatterns: []
|
2519
|
-
IgnoredMethods: [] # deprecated
|
2520
2529
|
Exclude:
|
2521
2530
|
- '**/*.gemspec'
|
2522
2531
|
|
@@ -2548,7 +2557,6 @@ Metrics/CyclomaticComplexity:
|
|
2548
2557
|
VersionChanged: '0.81'
|
2549
2558
|
AllowedMethods: []
|
2550
2559
|
AllowedPatterns: []
|
2551
|
-
IgnoredMethods: [] # deprecated
|
2552
2560
|
Max: 7
|
2553
2561
|
|
2554
2562
|
Metrics/MethodLength:
|
@@ -2560,10 +2568,8 @@ Metrics/MethodLength:
|
|
2560
2568
|
CountComments: false # count full line comments?
|
2561
2569
|
Max: 10
|
2562
2570
|
CountAsOne: []
|
2563
|
-
ExcludedMethods: [] # deprecated, retained for backwards compatibility
|
2564
2571
|
AllowedMethods: []
|
2565
2572
|
AllowedPatterns: []
|
2566
|
-
IgnoredMethods: [] # deprecated
|
2567
2573
|
|
2568
2574
|
Metrics/ModuleLength:
|
2569
2575
|
Description: 'Avoid modules longer than 100 lines of code.'
|
@@ -2593,7 +2599,6 @@ Metrics/PerceivedComplexity:
|
|
2593
2599
|
VersionChanged: '0.81'
|
2594
2600
|
AllowedMethods: []
|
2595
2601
|
AllowedPatterns: []
|
2596
|
-
IgnoredMethods: [] # deprecated
|
2597
2602
|
Max: 8
|
2598
2603
|
|
2599
2604
|
################## Migration #############################
|
@@ -2764,7 +2769,7 @@ Naming/HeredocDelimiterNaming:
|
|
2764
2769
|
Enabled: true
|
2765
2770
|
VersionAdded: '0.50'
|
2766
2771
|
ForbiddenDelimiters:
|
2767
|
-
- !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/'
|
2772
|
+
- !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/i'
|
2768
2773
|
|
2769
2774
|
Naming/InclusiveLanguage:
|
2770
2775
|
Description: 'Recommend the use of inclusive language instead of problematic terms.'
|
@@ -2822,7 +2827,6 @@ Naming/MethodName:
|
|
2822
2827
|
# - '\A\s*onSelectionCleared\s*'
|
2823
2828
|
#
|
2824
2829
|
AllowedPatterns: []
|
2825
|
-
IgnoredPatterns: [] # deprecated
|
2826
2830
|
|
2827
2831
|
Naming/MethodParameterName:
|
2828
2832
|
Description: >-
|
@@ -3192,7 +3196,6 @@ Style/BlockDelimiters:
|
|
3192
3196
|
- proc
|
3193
3197
|
- it
|
3194
3198
|
AllowedPatterns: []
|
3195
|
-
IgnoredMethods: [] # deprecated
|
3196
3199
|
# The AllowBracesOnProceduralOneLiners option is ignored unless the
|
3197
3200
|
# EnforcedStyle is set to `semantic`. If so:
|
3198
3201
|
#
|
@@ -3216,7 +3219,7 @@ Style/BlockDelimiters:
|
|
3216
3219
|
# collection.each do |element| puts element end
|
3217
3220
|
AllowBracesOnProceduralOneLiners: false
|
3218
3221
|
# The BracesRequiredMethods overrides all other configurations except
|
3219
|
-
#
|
3222
|
+
# AllowedMethods. It can be used to enforce that all blocks for specific
|
3220
3223
|
# methods use braces. For example, you can use this to enforce Sorbet
|
3221
3224
|
# signatures use braces even when the rest of your codebase enforces
|
3222
3225
|
# the `line_count_based` style.
|
@@ -3310,7 +3313,6 @@ Style/ClassEqualityComparison:
|
|
3310
3313
|
- equal?
|
3311
3314
|
- eql?
|
3312
3315
|
AllowedPatterns: []
|
3313
|
-
IgnoredMethods: [] # deprecated
|
3314
3316
|
|
3315
3317
|
Style/ClassMethods:
|
3316
3318
|
Description: 'Use self when defining module/class methods.'
|
@@ -3431,6 +3433,11 @@ Style/CommentedKeyword:
|
|
3431
3433
|
VersionAdded: '0.51'
|
3432
3434
|
VersionChanged: '1.19'
|
3433
3435
|
|
3436
|
+
Style/ComparableClamp:
|
3437
|
+
Description: 'Enforces the use of `Comparable#clamp` instead of comparison by minimum and maximum.'
|
3438
|
+
Enabled: pending
|
3439
|
+
VersionAdded: '1.44'
|
3440
|
+
|
3434
3441
|
Style/ConcatArrayLiterals:
|
3435
3442
|
Description: 'Enforces the use of `Array#push(item)` instead of `Array#concat([item])` to avoid redundant array literals.'
|
3436
3443
|
Enabled: pending
|
@@ -3780,7 +3787,6 @@ Style/FormatStringToken:
|
|
3780
3787
|
VersionChanged: '1.0'
|
3781
3788
|
AllowedMethods: []
|
3782
3789
|
AllowedPatterns: []
|
3783
|
-
IgnoredMethods: [] # deprecated
|
3784
3790
|
|
3785
3791
|
Style/FrozenStringLiteralComment:
|
3786
3792
|
Description: >-
|
@@ -4031,6 +4037,35 @@ Style/InverseMethods:
|
|
4031
4037
|
:select: :reject
|
4032
4038
|
:select!: :reject!
|
4033
4039
|
|
4040
|
+
Style/InvertibleUnlessCondition:
|
4041
|
+
Description: 'Favor `if` with inverted condition over `unless`.'
|
4042
|
+
Enabled: false
|
4043
|
+
VersionAdded: '1.44'
|
4044
|
+
# `InverseMethods` are methods that can be inverted in a `unless` condition.
|
4045
|
+
# The relationship of inverse methods needs to be defined in both directions.
|
4046
|
+
# Keys and values both need to be defined as symbols.
|
4047
|
+
InverseMethods:
|
4048
|
+
:!=: :==
|
4049
|
+
:>: :<=
|
4050
|
+
:<=: :>
|
4051
|
+
:<: :>=
|
4052
|
+
:>=: :<
|
4053
|
+
:!~: :=~
|
4054
|
+
:zero?: :nonzero?
|
4055
|
+
:nonzero?: :zero?
|
4056
|
+
:any?: :none?
|
4057
|
+
:none?: :any?
|
4058
|
+
:even?: :odd?
|
4059
|
+
:odd?: :even?
|
4060
|
+
# `ActiveSupport` defines some common inverse methods. They are listed below,
|
4061
|
+
# and not enabled by default.
|
4062
|
+
# :present?: :blank?
|
4063
|
+
# :blank?: :present?
|
4064
|
+
# :include?: :exclude?
|
4065
|
+
# :exclude?: :include?
|
4066
|
+
# :one?: :many?
|
4067
|
+
# :many?: :one?
|
4068
|
+
|
4034
4069
|
Style/IpAddresses:
|
4035
4070
|
Description: "Don't include literal IP addresses in code."
|
4036
4071
|
Enabled: false
|
@@ -4130,9 +4165,7 @@ Style/MethodCallWithArgsParentheses:
|
|
4130
4165
|
VersionChanged: '1.7'
|
4131
4166
|
IgnoreMacros: true
|
4132
4167
|
AllowedMethods: []
|
4133
|
-
IgnoredMethods: [] # deprecated
|
4134
4168
|
AllowedPatterns: []
|
4135
|
-
IgnoredPatterns: [] # deprecated
|
4136
4169
|
IncludedMacros: []
|
4137
4170
|
AllowParenthesesInMultilineCall: false
|
4138
4171
|
AllowParenthesesInChaining: false
|
@@ -4149,7 +4182,6 @@ Style/MethodCallWithoutArgsParentheses:
|
|
4149
4182
|
Enabled: true
|
4150
4183
|
AllowedMethods: []
|
4151
4184
|
AllowedPatterns: []
|
4152
|
-
IgnoredMethods: [] # deprecated
|
4153
4185
|
VersionAdded: '0.47'
|
4154
4186
|
VersionChanged: '0.55'
|
4155
4187
|
|
@@ -4528,7 +4560,6 @@ Style/NumericPredicate:
|
|
4528
4560
|
- comparison
|
4529
4561
|
AllowedMethods: []
|
4530
4562
|
AllowedPatterns: []
|
4531
|
-
IgnoredMethods: [] # deprecated
|
4532
4563
|
# Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
|
4533
4564
|
# false positives.
|
4534
4565
|
Exclude:
|
@@ -4808,6 +4839,11 @@ Style/RedundantFreeze:
|
|
4808
4839
|
VersionAdded: '0.34'
|
4809
4840
|
VersionChanged: '0.66'
|
4810
4841
|
|
4842
|
+
Style/RedundantHeredocDelimiterQuotes:
|
4843
|
+
Description: 'Checks for redundant heredoc delimiter quotes.'
|
4844
|
+
Enabled: pending
|
4845
|
+
VersionAdded: '1.45'
|
4846
|
+
|
4811
4847
|
Style/RedundantInitialize:
|
4812
4848
|
Description: 'Checks for redundant `initialize` methods.'
|
4813
4849
|
Enabled: pending
|
@@ -5205,7 +5241,6 @@ Style/SymbolProc:
|
|
5205
5241
|
AllowedMethods:
|
5206
5242
|
- define_method
|
5207
5243
|
AllowedPatterns: []
|
5208
|
-
IgnoredMethods: [] # deprecated
|
5209
5244
|
AllowComments: false
|
5210
5245
|
|
5211
5246
|
Style/TernaryParentheses:
|
data/lib/rubocop/cli.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'fileutils'
|
4
|
+
|
3
5
|
module RuboCop
|
4
6
|
# The CLI is a class responsible of handling all the command line interface
|
5
7
|
# logic.
|
@@ -38,14 +40,16 @@ module RuboCop
|
|
38
40
|
@options, paths = Options.new.parse(args)
|
39
41
|
@env = Environment.new(@options, @config_store, paths)
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
43
|
+
profile_if_needed do
|
44
|
+
if @options[:init]
|
45
|
+
run_command(:init)
|
46
|
+
else
|
47
|
+
act_on_options
|
48
|
+
validate_options_vs_config
|
49
|
+
parallel_by_default!
|
50
|
+
apply_default_formatter
|
51
|
+
execute_runners
|
52
|
+
end
|
49
53
|
end
|
50
54
|
rescue ConfigNotFoundError, IncorrectCopNameError, OptionArgumentError => e
|
51
55
|
warn e.message
|
@@ -68,6 +72,48 @@ module RuboCop
|
|
68
72
|
|
69
73
|
private
|
70
74
|
|
75
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
76
|
+
def profile_if_needed
|
77
|
+
return yield unless @options[:profile]
|
78
|
+
|
79
|
+
return STATUS_ERROR unless require_gem('stackprof')
|
80
|
+
|
81
|
+
with_memory = @options[:memory]
|
82
|
+
if with_memory
|
83
|
+
return STATUS_ERROR unless require_gem('memory_profiler')
|
84
|
+
|
85
|
+
MemoryProfiler.start
|
86
|
+
end
|
87
|
+
|
88
|
+
tmp_dir = File.join(ConfigFinder.project_root, 'tmp')
|
89
|
+
FileUtils.mkdir_p(tmp_dir)
|
90
|
+
status = nil
|
91
|
+
|
92
|
+
StackProf.run(out: File.join(tmp_dir, 'rubocop-stackprof.dump')) do
|
93
|
+
status = yield
|
94
|
+
end
|
95
|
+
puts 'Profile report generated'
|
96
|
+
|
97
|
+
if with_memory
|
98
|
+
puts 'Building memory report...'
|
99
|
+
report = MemoryProfiler.stop
|
100
|
+
report.pretty_print(
|
101
|
+
to_file: File.join(tmp_dir, 'rubocop-memory_profiler.txt'),
|
102
|
+
scale_bytes: true
|
103
|
+
)
|
104
|
+
end
|
105
|
+
status
|
106
|
+
end
|
107
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
108
|
+
|
109
|
+
def require_gem(name)
|
110
|
+
require name
|
111
|
+
true
|
112
|
+
rescue LoadError
|
113
|
+
warn("You don't have #{name} installed. Add it to your Gemfile and run `bundle install`")
|
114
|
+
false
|
115
|
+
end
|
116
|
+
|
71
117
|
def run_command(name)
|
72
118
|
@env.run(name)
|
73
119
|
end
|
@@ -111,10 +111,17 @@ module RuboCop
|
|
111
111
|
end
|
112
112
|
|
113
113
|
merge_with_default(config, config_file).tap do |merged_config|
|
114
|
-
|
114
|
+
unless possible_new_cops?(merged_config)
|
115
|
+
pending_cops = pending_cops_only_qualified(merged_config.pending_cops)
|
116
|
+
warn_on_pending_cops(pending_cops) unless pending_cops.empty?
|
117
|
+
end
|
115
118
|
end
|
116
119
|
end
|
117
120
|
|
121
|
+
def pending_cops_only_qualified(pending_cops)
|
122
|
+
pending_cops.select { |cop| Cop::Registry.qualified_cop?(cop.name) }
|
123
|
+
end
|
124
|
+
|
118
125
|
def possible_new_cops?(config)
|
119
126
|
disable_pending_cops || enable_pending_cops ||
|
120
127
|
config.disabled_new_cops? || config.enabled_new_cops?
|
@@ -167,8 +174,6 @@ module RuboCop
|
|
167
174
|
BANNER
|
168
175
|
|
169
176
|
def warn_on_pending_cops(pending_cops)
|
170
|
-
return if pending_cops.empty?
|
171
|
-
|
172
177
|
warn Rainbow(PENDING_BANNER).yellow
|
173
178
|
|
174
179
|
pending_cops.each { |cop| warn_pending_cop cop }
|
@@ -241,18 +246,10 @@ module RuboCop
|
|
241
246
|
raise
|
242
247
|
end
|
243
248
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
permitted_symbols: [],
|
249
|
-
aliases: true,
|
250
|
-
filename: filename)
|
251
|
-
end
|
252
|
-
else # Ruby < 2.6
|
253
|
-
def yaml_safe_load!(yaml_code, filename)
|
254
|
-
YAML.safe_load(yaml_code, [Regexp, Symbol], [], true, filename)
|
255
|
-
end
|
249
|
+
def yaml_safe_load!(yaml_code, filename)
|
250
|
+
YAML.safe_load(
|
251
|
+
yaml_code, permitted_classes: [Regexp, Symbol], aliases: true, filename: filename
|
252
|
+
)
|
256
253
|
end
|
257
254
|
end
|
258
255
|
|
@@ -33,7 +33,7 @@ module RuboCop
|
|
33
33
|
inherit_mode: determine_inherit_mode(hash, k))
|
34
34
|
end
|
35
35
|
hash[k] = v
|
36
|
-
fix_include_paths(base_config.loaded_path, hash,
|
36
|
+
fix_include_paths(base_config.loaded_path, hash, k, v) if v.key?('Include')
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -42,13 +42,12 @@ module RuboCop
|
|
42
42
|
# base configuration are relative to the directory where the base configuration file is. For the
|
43
43
|
# derived configuration, we need to make those paths relative to where the derived configuration
|
44
44
|
# file is.
|
45
|
-
def fix_include_paths(base_config_path, hash,
|
45
|
+
def fix_include_paths(base_config_path, hash, key, value)
|
46
46
|
return unless File.basename(base_config_path).start_with?('.rubocop')
|
47
47
|
|
48
48
|
base_dir = File.dirname(base_config_path)
|
49
|
-
derived_dir = File.dirname(path)
|
50
49
|
hash[key]['Include'] = value['Include'].map do |include_path|
|
51
|
-
PathUtil.relative_path(File.join(base_dir, include_path),
|
50
|
+
PathUtil.relative_path(File.join(base_dir, include_path), Dir.pwd)
|
52
51
|
end
|
53
52
|
end
|
54
53
|
|
data/lib/rubocop/cop/base.rb
CHANGED
@@ -180,6 +180,10 @@ module RuboCop
|
|
180
180
|
|
181
181
|
status, corrector = enabled_line?(range.line) ? correct(range, &block) : :disabled
|
182
182
|
|
183
|
+
# Since this range may be generated from Ruby code embedded in some
|
184
|
+
# template file, we convert it to location info in the original file.
|
185
|
+
range = range_for_original(range)
|
186
|
+
|
183
187
|
current_offenses << Offense.new(severity, range, message, name, status, corrector)
|
184
188
|
end
|
185
189
|
|
@@ -286,6 +290,21 @@ module RuboCop
|
|
286
290
|
end
|
287
291
|
# rubocop:enable Layout/ClassStructure
|
288
292
|
|
293
|
+
# Called before any investigation
|
294
|
+
# @api private
|
295
|
+
def begin_investigation(processed_source, offset: 0, original: processed_source)
|
296
|
+
@current_offenses = nil
|
297
|
+
@current_offense_locations = nil
|
298
|
+
@currently_disabled_lines = nil
|
299
|
+
@processed_source = processed_source
|
300
|
+
@current_corrector = nil
|
301
|
+
|
302
|
+
# We need to keep track of the original source and offset,
|
303
|
+
# because `processed_source` here may be an embedded code in it.
|
304
|
+
@current_offset = offset
|
305
|
+
@current_original = original
|
306
|
+
end
|
307
|
+
|
289
308
|
private
|
290
309
|
|
291
310
|
### Reserved for Cop::Cop
|
@@ -320,15 +339,6 @@ module RuboCop
|
|
320
339
|
@restrict_on_send ||= self::RESTRICT_ON_SEND.to_a.freeze
|
321
340
|
end
|
322
341
|
|
323
|
-
# Called before any investigation
|
324
|
-
def begin_investigation(processed_source)
|
325
|
-
@current_offenses = nil
|
326
|
-
@current_offense_locations = nil
|
327
|
-
@currently_disabled_lines = nil
|
328
|
-
@processed_source = processed_source
|
329
|
-
@current_corrector = nil
|
330
|
-
end
|
331
|
-
|
332
342
|
EMPTY_OFFENSES = [].freeze
|
333
343
|
private_constant :EMPTY_OFFENSES
|
334
344
|
# Called to complete an investigation
|
@@ -459,6 +469,14 @@ module RuboCop
|
|
459
469
|
warn(Rainbow(message).red)
|
460
470
|
end
|
461
471
|
end
|
472
|
+
|
473
|
+
def range_for_original(range)
|
474
|
+
::Parser::Source::Range.new(
|
475
|
+
@current_original.buffer,
|
476
|
+
range.begin_pos + @current_offset,
|
477
|
+
range.end_pos + @current_offset
|
478
|
+
)
|
479
|
+
end
|
462
480
|
end
|
463
481
|
end
|
464
482
|
end
|
@@ -76,10 +76,10 @@ module RuboCop
|
|
76
76
|
end
|
77
77
|
|
78
78
|
# @return [InvestigationReport]
|
79
|
-
def investigate(processed_source)
|
79
|
+
def investigate(processed_source, offset: 0, original: processed_source)
|
80
80
|
reset
|
81
81
|
|
82
|
-
|
82
|
+
begin_investigation(processed_source, offset: offset, original: original)
|
83
83
|
if processed_source.valid_syntax?
|
84
84
|
invoke(:on_new_investigation, @cops)
|
85
85
|
invoke_with_argument(:investigate, @forces, processed_source)
|
@@ -95,6 +95,12 @@ module RuboCop
|
|
95
95
|
|
96
96
|
private
|
97
97
|
|
98
|
+
def begin_investigation(processed_source, offset:, original:)
|
99
|
+
@cops.each do |cop|
|
100
|
+
cop.begin_investigation(processed_source, offset: offset, original: original)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
98
104
|
def trigger_responding_cops(callback, node)
|
99
105
|
@callbacks[callback]&.each do |cop|
|
100
106
|
with_cop_error_handling(cop, node) do
|
data/lib/rubocop/cop/cop.rb
CHANGED
@@ -53,6 +53,11 @@ module RuboCop
|
|
53
53
|
def add_offense(node_or_range, location: :expression, message: nil, severity: nil, &block)
|
54
54
|
@v0_argument = node_or_range
|
55
55
|
range = find_location(node_or_range, location)
|
56
|
+
|
57
|
+
# Since this range may be generated from Ruby code embedded in some
|
58
|
+
# template file, we convert it to location info in the original file.
|
59
|
+
range = range_for_original(range)
|
60
|
+
|
56
61
|
if block.nil? && !support_autocorrect?
|
57
62
|
super(range, message: message, severity: severity)
|
58
63
|
else
|
@@ -93,14 +98,21 @@ module RuboCop
|
|
93
98
|
super
|
94
99
|
end
|
95
100
|
|
96
|
-
|
97
|
-
|
98
|
-
def begin_investigation(processed_source)
|
101
|
+
# Called before any investigation
|
102
|
+
# @api private
|
103
|
+
def begin_investigation(processed_source, offset: 0, original: processed_source)
|
99
104
|
super
|
100
105
|
@offenses = current_offenses
|
101
106
|
@last_corrector = @current_corrector
|
107
|
+
|
108
|
+
# We need to keep track of the original source and offset,
|
109
|
+
# because `processed_source` here may be an embedded code in it.
|
110
|
+
@current_offset = offset
|
111
|
+
@current_original = original
|
102
112
|
end
|
103
113
|
|
114
|
+
private
|
115
|
+
|
104
116
|
# Override Base
|
105
117
|
def callback_argument(_range)
|
106
118
|
@v0_argument
|
@@ -141,6 +153,14 @@ module RuboCop
|
|
141
153
|
rescue ::Parser::ClobberingError
|
142
154
|
# ignore Clobbering errors
|
143
155
|
end
|
156
|
+
|
157
|
+
def range_for_original(range)
|
158
|
+
::Parser::Source::Range.new(
|
159
|
+
@current_original.buffer,
|
160
|
+
range.begin_pos + @current_offset,
|
161
|
+
range.end_pos + @current_offset
|
162
|
+
)
|
163
|
+
end
|
144
164
|
end
|
145
165
|
end
|
146
166
|
end
|
@@ -86,8 +86,16 @@ module RuboCop
|
|
86
86
|
range1 = to_range(node_or_range1)
|
87
87
|
range2 = to_range(node_or_range2)
|
88
88
|
|
89
|
-
|
90
|
-
|
89
|
+
if range1.end_pos == range2.begin_pos
|
90
|
+
insert_before(range1, range2.source)
|
91
|
+
remove(range2)
|
92
|
+
elsif range2.end_pos == range1.begin_pos
|
93
|
+
insert_before(range2, range1.source)
|
94
|
+
remove(range1)
|
95
|
+
else
|
96
|
+
replace(range1, range2.source)
|
97
|
+
replace(range2, range1.source)
|
98
|
+
end
|
91
99
|
end
|
92
100
|
|
93
101
|
private
|
@@ -18,7 +18,7 @@ module RuboCop
|
|
18
18
|
current_range = declaration_with_comment(node)
|
19
19
|
previous_range = declaration_with_comment(previous_declaration)
|
20
20
|
|
21
|
-
->(corrector) {
|
21
|
+
->(corrector) { corrector.swap(current_range, previous_range) }
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -32,11 +32,6 @@ module RuboCop
|
|
32
32
|
|
33
33
|
range_between(begin_pos, end_pos)
|
34
34
|
end
|
35
|
-
|
36
|
-
def swap_range(corrector, range1, range2)
|
37
|
-
corrector.insert_before(range2, range1.source)
|
38
|
-
corrector.remove(range1)
|
39
|
-
end
|
40
35
|
end
|
41
36
|
end
|
42
37
|
end
|