rubocop 1.64.1 → 1.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/config/default.yml +11 -1
- data/lib/rubocop/config_loader.rb +1 -1
- data/lib/rubocop/config_loader_resolver.rb +9 -3
- data/lib/rubocop/cop/cop.rb +20 -2
- data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +20 -20
- data/lib/rubocop/cop/layout/space_around_operators.rb +3 -0
- data/lib/rubocop/cop/legacy/corrector.rb +12 -2
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +1 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +14 -7
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +2 -9
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/void.rb +5 -0
- data/lib/rubocop/cop/metrics/block_nesting.rb +19 -7
- data/lib/rubocop/cop/mixin/alignment.rb +5 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
- data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -1
- data/lib/rubocop/cop/style/hash_except.rb +8 -5
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +77 -43
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -0
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +15 -1
- data/lib/rubocop/cop/style/super_arguments.rb +28 -10
- data/lib/rubocop/cop/style/symbol_proc.rb +8 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +28 -24
- data/lib/rubocop/cop/team.rb +8 -0
- data/lib/rubocop/cop/util.rb +7 -1
- data/lib/rubocop/cops_documentation_generator.rb +1 -1
- data/lib/rubocop/ext/regexp_parser.rb +4 -21
- data/lib/rubocop/formatter/html_formatter.rb +3 -1
- data/lib/rubocop/rspec/shared_contexts.rb +20 -0
- data/lib/rubocop/rspec/support.rb +1 -0
- data/lib/rubocop/server/cache.rb +10 -0
- data/lib/rubocop/server/client_command/exec.rb +2 -2
- data/lib/rubocop/server/client_command/start.rb +1 -1
- data/lib/rubocop/server/core.rb +4 -0
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +1 -0
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 459d541c6d59f9d241213403a76f0ebe00f91e248167a7d5b7b3cc9970d7e92c
|
4
|
+
data.tar.gz: db90495c3208a80a2a41efd7daaa5fcf2b88560cb47ff0bfa861bc01cfa2cf19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b92f5ce74858e5142fb49469a84550e70fb19d388943432ec46b861ab224704d3ebbea964a94db275653c863b2a0afb202211557e9c26d7f4f25fdba3a741d9
|
7
|
+
data.tar.gz: 9a631b9c9b68f3c1489add6fcbf5bdd80cc043fdfb5a8d0d6525b83780df734ce7ccdae46523d3b516c105599baa01ab5807ff9a12f0e939b55c1c313f80d8d2
|
data/README.md
CHANGED
@@ -52,7 +52,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
|
|
52
52
|
in your `Gemfile`:
|
53
53
|
|
54
54
|
```rb
|
55
|
-
gem 'rubocop', '~> 1.
|
55
|
+
gem 'rubocop', '~> 1.65', require: false
|
56
56
|
```
|
57
57
|
|
58
58
|
See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
|
data/config/default.yml
CHANGED
@@ -262,6 +262,15 @@ Bundler/OrderedGems:
|
|
262
262
|
|
263
263
|
#################### Gemspec ###############################
|
264
264
|
|
265
|
+
Gemspec/AddRuntimeDependency:
|
266
|
+
Description: 'Prefer `add_dependency` over `add_runtime_dependency`.'
|
267
|
+
StyleGuide: '#add_dependency_vs_add_runtime_dependency'
|
268
|
+
Reference: https://github.com/rubygems/rubygems/issues/7799#issuecomment-2192720316
|
269
|
+
Enabled: pending
|
270
|
+
VersionAdded: '1.65'
|
271
|
+
Include:
|
272
|
+
- '**/*.gemspec'
|
273
|
+
|
265
274
|
Gemspec/DependencyVersion:
|
266
275
|
Description: 'Requires or forbids specifying gem dependency versions.'
|
267
276
|
Enabled: false
|
@@ -2617,8 +2626,9 @@ Metrics/BlockNesting:
|
|
2617
2626
|
StyleGuide: '#three-is-the-number-thou-shalt-count'
|
2618
2627
|
Enabled: true
|
2619
2628
|
VersionAdded: '0.25'
|
2620
|
-
VersionChanged: '
|
2629
|
+
VersionChanged: '1.65'
|
2621
2630
|
CountBlocks: false
|
2631
|
+
CountModifierForms: false
|
2622
2632
|
Max: 3
|
2623
2633
|
|
2624
2634
|
Metrics/ClassLength:
|
@@ -164,7 +164,7 @@ module RuboCop
|
|
164
164
|
# searches will go past this directory.
|
165
165
|
# @deprecated Use `RuboCop::ConfigFinder.project_root` instead.
|
166
166
|
def project_root
|
167
|
-
warn Rainbow(<<~WARNING).yellow
|
167
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
168
168
|
`RuboCop::ConfigLoader.project_root` is deprecated and will be removed in RuboCop 2.0. \
|
169
169
|
Use `RuboCop::ConfigFinder.project_root` instead.
|
170
170
|
WARNING
|
@@ -6,7 +6,7 @@ require 'yaml'
|
|
6
6
|
module RuboCop
|
7
7
|
# A help class for ConfigLoader that handles configuration resolution.
|
8
8
|
# @api private
|
9
|
-
class ConfigLoaderResolver
|
9
|
+
class ConfigLoaderResolver # rubocop:disable Metrics/ClassLength
|
10
10
|
def resolve_requires(path, hash)
|
11
11
|
config_dir = File.dirname(path)
|
12
12
|
hash.delete('require').tap do |loaded_features|
|
@@ -267,8 +267,14 @@ module RuboCop
|
|
267
267
|
|
268
268
|
def gem_config_path(gem_name, relative_config_path)
|
269
269
|
if defined?(Bundler)
|
270
|
-
|
271
|
-
|
270
|
+
begin
|
271
|
+
gem = Bundler.load.specs[gem_name].first
|
272
|
+
gem_path = gem.full_gem_path if gem
|
273
|
+
rescue Bundler::GemfileNotFound
|
274
|
+
# No Gemfile found. Bundler may be loaded manually
|
275
|
+
rescue Bundler::GitError
|
276
|
+
# The Gemfile exists but contains an uninstalled git source
|
277
|
+
end
|
272
278
|
end
|
273
279
|
|
274
280
|
gem_path ||= Gem::Specification.find_by_name(gem_name).gem_dir
|
data/lib/rubocop/cop/cop.rb
CHANGED
@@ -37,16 +37,28 @@ module RuboCop
|
|
37
37
|
|
38
38
|
# @deprecated Use Registry.global
|
39
39
|
def self.registry
|
40
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
41
|
+
`Cop.registry` is deprecated. Use `Registry.global` instead.
|
42
|
+
WARNING
|
43
|
+
|
40
44
|
Registry.global
|
41
45
|
end
|
42
46
|
|
43
47
|
# @deprecated Use Registry.all
|
44
48
|
def self.all
|
49
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
50
|
+
`Cop.all` is deprecated. Use `Registry.all` instead.
|
51
|
+
WARNING
|
52
|
+
|
45
53
|
Registry.all
|
46
54
|
end
|
47
55
|
|
48
56
|
# @deprecated Use Registry.qualified_cop_name
|
49
57
|
def self.qualified_cop_name(name, origin)
|
58
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
59
|
+
`Cop.qualified_cop_name` is deprecated. Use `Registry.qualified_cop_name` instead.
|
60
|
+
WARNING
|
61
|
+
|
50
62
|
Registry.qualified_cop_name(name, origin)
|
51
63
|
end
|
52
64
|
|
@@ -74,13 +86,19 @@ module RuboCop
|
|
74
86
|
|
75
87
|
# @deprecated Use class method
|
76
88
|
def support_autocorrect?
|
77
|
-
|
89
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
90
|
+
`support_autocorrect?` is deprecated. Use `cop.class.support_autocorrect?`.
|
91
|
+
WARNING
|
92
|
+
|
78
93
|
self.class.support_autocorrect?
|
79
94
|
end
|
80
95
|
|
81
96
|
# @deprecated
|
82
97
|
def corrections
|
83
|
-
|
98
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
99
|
+
`Cop#corrections` is deprecated.
|
100
|
+
WARNING
|
101
|
+
|
84
102
|
return [] unless @last_corrector
|
85
103
|
|
86
104
|
Legacy::CorrectionsProxy.new(@last_corrector)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Gemspec
|
6
|
+
# Prefer `add_dependency` over `add_runtime_dependency` as the latter is
|
7
|
+
# considered soft-deprecated.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
#
|
11
|
+
# # bad
|
12
|
+
# Gem::Specification.new do |spec|
|
13
|
+
# spec.add_runtime_dependency('rubocop')
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# Gem::Specification.new do |spec|
|
18
|
+
# spec.add_dependency('rubocop')
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
class AddRuntimeDependency < Base
|
22
|
+
extend AutoCorrector
|
23
|
+
|
24
|
+
MSG = 'Use `add_dependency` instead of `add_runtime_dependency`.'
|
25
|
+
|
26
|
+
RESTRICT_ON_SEND = %i[add_runtime_dependency].freeze
|
27
|
+
|
28
|
+
def on_send(node)
|
29
|
+
return if !node.receiver || node.arguments.empty?
|
30
|
+
|
31
|
+
add_offense(node.loc.selector) do |corrector|
|
32
|
+
corrector.replace(node.loc.selector, 'add_dependency')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -31,8 +31,8 @@ module RuboCop
|
|
31
31
|
#
|
32
32
|
# # good
|
33
33
|
# Gem::Specification.new do |spec|
|
34
|
-
# spec.
|
35
|
-
# spec.
|
34
|
+
# spec.add_dependency('parallel', '~> 1.10')
|
35
|
+
# spec.add_dependency('parser', '>= 2.3.3.1', '< 3.0')
|
36
36
|
# end
|
37
37
|
class DuplicatedAssignment < Base
|
38
38
|
include RangeHelp
|
@@ -14,15 +14,15 @@ module RuboCop
|
|
14
14
|
# # bad
|
15
15
|
# Gem::Specification.new do |spec|
|
16
16
|
# if RUBY_VERSION >= '3.0'
|
17
|
-
# spec.
|
17
|
+
# spec.add_dependency 'gem_a'
|
18
18
|
# else
|
19
|
-
# spec.
|
19
|
+
# spec.add_dependency 'gem_b'
|
20
20
|
# end
|
21
21
|
# end
|
22
22
|
#
|
23
23
|
# # good
|
24
24
|
# Gem::Specification.new do |spec|
|
25
|
-
# spec.
|
25
|
+
# spec.add_dependency 'gem_a'
|
26
26
|
# end
|
27
27
|
#
|
28
28
|
class RubyVersionGlobalsUsage < Base
|
@@ -121,7 +121,7 @@ module RuboCop
|
|
121
121
|
return if case_node.single_line?
|
122
122
|
return if enforced_style_end? && end_and_last_conditional_same_line?(case_node)
|
123
123
|
|
124
|
-
case_node.
|
124
|
+
case_node.when_branches.each { |when_node| check_when(when_node, 'when') }
|
125
125
|
end
|
126
126
|
|
127
127
|
def on_case_match(case_match_node)
|
@@ -118,8 +118,8 @@ module RuboCop
|
|
118
118
|
#
|
119
119
|
# @example EnforcedStyle: special_for_inner_method_call
|
120
120
|
# # The first argument should normally be indented one step more than
|
121
|
-
# # the preceding line, but if it's
|
122
|
-
# # is itself
|
121
|
+
# # the preceding line, but if it's an argument for a method call that
|
122
|
+
# # is itself an argument in a method call, then the inner argument
|
123
123
|
# # should be indented relative to the inner method.
|
124
124
|
#
|
125
125
|
# # good
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
6
6
|
# Checks the indentation of the here document bodies. The bodies
|
7
7
|
# are indented one step.
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# NOTE: When ``Layout/LineLength``'s `AllowHeredoc` is false (not default),
|
10
10
|
# this cop does not add any offenses for long here documents to
|
11
11
|
# avoid ``Layout/LineLength``'s offenses.
|
12
12
|
#
|
@@ -17,29 +17,29 @@ module RuboCop
|
|
17
17
|
# split across lines. These include arrays, hashes, and
|
18
18
|
# method calls with argument lists.
|
19
19
|
#
|
20
|
-
# If autocorrection is enabled, the following
|
20
|
+
# If autocorrection is enabled, the following cops
|
21
21
|
# are recommended to further format the broken lines.
|
22
22
|
# (Many of these are enabled by default.)
|
23
23
|
#
|
24
|
-
# * ArgumentAlignment
|
25
|
-
# * ArrayAlignment
|
26
|
-
# * BlockAlignment
|
27
|
-
# *
|
28
|
-
# *
|
29
|
-
# *
|
30
|
-
# *
|
31
|
-
# *
|
32
|
-
# *
|
33
|
-
# *
|
34
|
-
# *
|
35
|
-
# *
|
36
|
-
# *
|
37
|
-
# *
|
38
|
-
# *
|
39
|
-
# *
|
40
|
-
# *
|
41
|
-
# *
|
42
|
-
# *
|
24
|
+
# * `Layout/ArgumentAlignment`
|
25
|
+
# * `Layout/ArrayAlignment`
|
26
|
+
# * `Layout/BlockAlignment`
|
27
|
+
# * `Layout/BlockEndNewline`
|
28
|
+
# * `LayoutClosingParenthesisIndentation`
|
29
|
+
# * `LayoutFirstArgumentIndentation`
|
30
|
+
# * `LayoutFirstArrayElementIndentation`
|
31
|
+
# * `LayoutFirstHashElementIndentation`
|
32
|
+
# * `LayoutFirstParameterIndentation`
|
33
|
+
# * `LayoutHashAlignment`
|
34
|
+
# * `LayoutIndentationWidth`
|
35
|
+
# * `LayoutMultilineArrayLineBreaks`
|
36
|
+
# * `LayoutMultilineBlockLayout`
|
37
|
+
# * `LayoutMultilineHashBraceLayout`
|
38
|
+
# * `LayoutMultilineHashKeyLineBreaks`
|
39
|
+
# * `LayoutMultilineMethodArgumentLineBreaks`
|
40
|
+
# * `LayoutMultilineMethodParameterLineBreaks`
|
41
|
+
# * `Layout/ParameterAlignment`
|
42
|
+
# * `Style/BlockDelimiters`
|
43
43
|
#
|
44
44
|
# Together, these cops will pretty print hashes, arrays,
|
45
45
|
# method calls, etc. For example, let's say the max columns
|
@@ -180,6 +180,9 @@ module RuboCop
|
|
180
180
|
with_space = range_with_surrounding_space(operator)
|
181
181
|
return if with_space.source.start_with?("\n")
|
182
182
|
|
183
|
+
comment = processed_source.comment_at_line(operator.line)
|
184
|
+
return if comment && with_space.last_column == comment.loc.column
|
185
|
+
|
183
186
|
offense(type, operator, with_space, right_operand) do |msg|
|
184
187
|
add_offense(operator, message: msg) do |corrector|
|
185
188
|
autocorrect(corrector, with_space, right_operand)
|
@@ -12,13 +12,23 @@ module RuboCop
|
|
12
12
|
if corr.is_a?(CorrectionsProxy)
|
13
13
|
merge!(corr.send(:corrector))
|
14
14
|
else
|
15
|
-
|
15
|
+
unless corr.empty?
|
16
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
17
|
+
`Corrector.new` with corrections is deprecated.
|
18
|
+
See https://docs.rubocop.org/rubocop/v1_upgrade_notes.html
|
19
|
+
WARNING
|
20
|
+
end
|
21
|
+
|
16
22
|
corr.each { |c| corrections << c }
|
17
23
|
end
|
18
24
|
end
|
19
25
|
|
20
26
|
def corrections
|
21
|
-
|
27
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
28
|
+
`Corrector#corrections` is deprecated. Open an issue if you have a valid usecase.
|
29
|
+
See https://docs.rubocop.org/rubocop/v1_upgrade_notes.html
|
30
|
+
WARNING
|
31
|
+
|
22
32
|
CorrectionsProxy.new(self)
|
23
33
|
end
|
24
34
|
end
|
@@ -32,7 +32,7 @@ module RuboCop
|
|
32
32
|
|
33
33
|
def on_case(case_node)
|
34
34
|
case_node.when_branches.each_with_object(Set.new) do |when_node, previous|
|
35
|
-
when_node.
|
35
|
+
when_node.conditions.each do |condition|
|
36
36
|
add_offense(condition) unless previous.add?(condition)
|
37
37
|
end
|
38
38
|
end
|
@@ -50,7 +50,7 @@ module RuboCop
|
|
50
50
|
MSG = 'Avoid `when` branches without a body.'
|
51
51
|
|
52
52
|
def on_case(node)
|
53
|
-
node.
|
53
|
+
node.when_branches.each do |when_node|
|
54
54
|
next if when_node.body
|
55
55
|
next if cop_config['AllowComments'] && contains_comments?(when_node)
|
56
56
|
|
@@ -23,27 +23,34 @@ module RuboCop
|
|
23
23
|
# 'Item 2'
|
24
24
|
# ]
|
25
25
|
class ImplicitStringConcatenation < Base
|
26
|
-
|
26
|
+
extend AutoCorrector
|
27
|
+
|
28
|
+
MSG = 'Combine %<lhs>s and %<rhs>s into a single string ' \
|
27
29
|
'literal, rather than using implicit string concatenation.'
|
28
30
|
FOR_ARRAY = ' Or, if they were intended to be separate array ' \
|
29
31
|
'elements, separate them with a comma.'
|
30
32
|
FOR_METHOD = ' Or, if they were intended to be separate method ' \
|
31
33
|
'arguments, separate them with a comma.'
|
32
34
|
|
35
|
+
# rubocop:disable Metrics/AbcSize
|
33
36
|
def on_dstr(node)
|
34
|
-
each_bad_cons(node) do |
|
35
|
-
range
|
36
|
-
message = format(MSG,
|
37
|
-
string1: display_str(child_node1),
|
38
|
-
string2: display_str(child_node2))
|
37
|
+
each_bad_cons(node) do |lhs_node, rhs_node|
|
38
|
+
range = lhs_node.source_range.join(rhs_node.source_range)
|
39
|
+
message = format(MSG, lhs: display_str(lhs_node), rhs: display_str(rhs_node))
|
39
40
|
if node.parent&.array_type?
|
40
41
|
message << FOR_ARRAY
|
41
42
|
elsif node.parent&.send_type?
|
42
43
|
message << FOR_METHOD
|
43
44
|
end
|
44
|
-
|
45
|
+
|
46
|
+
add_offense(range, message: message) do |corrector|
|
47
|
+
preferred = "#{lhs_node.source} + #{rhs_node.source}"
|
48
|
+
|
49
|
+
corrector.replace(range, preferred)
|
50
|
+
end
|
45
51
|
end
|
46
52
|
end
|
53
|
+
# rubocop:enable Metrics/AbcSize
|
47
54
|
|
48
55
|
private
|
49
56
|
|
@@ -102,7 +102,7 @@ module RuboCop
|
|
102
102
|
|
103
103
|
def on_def(node)
|
104
104
|
subject, = *node
|
105
|
-
return if node.defs_type? && subject.
|
105
|
+
return if node.defs_type? && subject.variable?
|
106
106
|
|
107
107
|
def_ancestor = node.each_ancestor(:def, :defs).first
|
108
108
|
return unless def_ancestor
|
@@ -49,15 +49,8 @@ module RuboCop
|
|
49
49
|
return unless def_node
|
50
50
|
|
51
51
|
enum_conversion_call?(node) do |method_node, arguments|
|
52
|
-
next if method_node.
|
53
|
-
|
54
|
-
|
55
|
-
valid = if method_name?(method_node, def_node.method_name)
|
56
|
-
arguments_match?(arguments, def_node)
|
57
|
-
else
|
58
|
-
def_node.arguments.empty?
|
59
|
-
end
|
60
|
-
return if valid
|
52
|
+
next if !method_name?(method_node, def_node.method_name) ||
|
53
|
+
arguments_match?(arguments, def_node)
|
61
54
|
|
62
55
|
add_offense(node)
|
63
56
|
end
|
@@ -111,6 +111,8 @@ module RuboCop
|
|
111
111
|
end
|
112
112
|
|
113
113
|
def check_expression(expr)
|
114
|
+
expr = expr.body if expr.if_type? && expr.modifier_form?
|
115
|
+
|
114
116
|
check_literal(expr)
|
115
117
|
check_var(expr)
|
116
118
|
check_self(expr)
|
@@ -121,6 +123,7 @@ module RuboCop
|
|
121
123
|
end
|
122
124
|
|
123
125
|
def check_void_op(node, &block)
|
126
|
+
node = node.children.first while node.begin_type?
|
124
127
|
return unless node.send_type? && OPERATORS.include?(node.method_name)
|
125
128
|
return if block && yield(node)
|
126
129
|
|
@@ -211,6 +214,8 @@ module RuboCop
|
|
211
214
|
end
|
212
215
|
|
213
216
|
def autocorrect_void_expression(corrector, node)
|
217
|
+
return if node.parent.if_type? && node.parent.modifier_form?
|
218
|
+
|
214
219
|
corrector.remove(range_with_surrounding_space(range: node.source_range, side: :left))
|
215
220
|
end
|
216
221
|
|
@@ -3,12 +3,12 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Metrics
|
6
|
-
# Checks for excessive nesting of conditional and looping
|
7
|
-
# constructs.
|
6
|
+
# Checks for excessive nesting of conditional and looping constructs.
|
8
7
|
#
|
9
|
-
# You can configure if blocks are considered using the `CountBlocks`
|
10
|
-
#
|
11
|
-
# towards the nesting level. Set to `true` to
|
8
|
+
# You can configure if blocks are considered using the `CountBlocks` and `CountModifierForms`
|
9
|
+
# options. When both are set to `false` (the default) blocks and modifier forms are not
|
10
|
+
# counted towards the nesting level. Set them to `true` to include these in the nesting level
|
11
|
+
# calculation as well.
|
12
12
|
#
|
13
13
|
# The maximum level of nesting allowed is configurable.
|
14
14
|
class BlockNesting < Base
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
27
27
|
|
28
28
|
def check_nesting_level(node, max, current_level)
|
29
29
|
if consider_node?(node)
|
30
|
-
current_level += 1
|
30
|
+
current_level += 1 if count_if_block?(node)
|
31
31
|
if current_level > max
|
32
32
|
self.max = current_level
|
33
33
|
unless part_of_ignored_node?(node)
|
@@ -41,6 +41,14 @@ module RuboCop
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
def count_if_block?(node)
|
45
|
+
return true unless node.if_type?
|
46
|
+
return false if node.elsif?
|
47
|
+
return count_modifier_forms? if node.modifier_form?
|
48
|
+
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
44
52
|
def consider_node?(node)
|
45
53
|
return true if NESTING_BLOCKS.include?(node.type)
|
46
54
|
|
@@ -52,7 +60,11 @@ module RuboCop
|
|
52
60
|
end
|
53
61
|
|
54
62
|
def count_blocks?
|
55
|
-
cop_config
|
63
|
+
cop_config.fetch('CountBlocks', false)
|
64
|
+
end
|
65
|
+
|
66
|
+
def count_modifier_forms?
|
67
|
+
cop_config.fetch('CountModifierForms', false)
|
56
68
|
end
|
57
69
|
end
|
58
70
|
end
|
@@ -65,8 +65,12 @@ module RuboCop
|
|
65
65
|
inner.begin_pos >= outer.begin_pos && inner.end_pos <= outer.end_pos
|
66
66
|
end
|
67
67
|
|
68
|
-
# @deprecated Use processed_source.
|
68
|
+
# @deprecated Use processed_source.line_with_comment?(line)
|
69
69
|
def end_of_line_comment(line)
|
70
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
71
|
+
`end_of_line_comment` is deprecated. Use `processed_source.line_with_comment?` instead.
|
72
|
+
WARNING
|
73
|
+
|
70
74
|
processed_source.line_with_comment?(line)
|
71
75
|
end
|
72
76
|
|
@@ -15,7 +15,13 @@ module RuboCop
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# @deprecated Use allowed_method? instead
|
18
|
-
|
18
|
+
def ignored_method?
|
19
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
20
|
+
`ignored_method?` is deprecated. Use `allowed_method?` instead.
|
21
|
+
WARNING
|
22
|
+
|
23
|
+
allowed_method?
|
24
|
+
end
|
19
25
|
|
20
26
|
# @api public
|
21
27
|
def allowed_methods
|
@@ -18,14 +18,26 @@ module RuboCop
|
|
18
18
|
end
|
19
19
|
|
20
20
|
# @deprecated Use allowed_line? instead
|
21
|
-
|
21
|
+
def ignored_line?
|
22
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
23
|
+
`ignored_line?` is deprecated. Use `allowed_line?` instead.
|
24
|
+
WARNING
|
25
|
+
|
26
|
+
allowed_line?
|
27
|
+
end
|
22
28
|
|
23
29
|
def matches_allowed_pattern?(line)
|
24
30
|
allowed_patterns.any? { |pattern| Regexp.new(pattern).match?(line) }
|
25
31
|
end
|
26
32
|
|
27
|
-
# @deprecated Use matches_allowed_pattern
|
28
|
-
|
33
|
+
# @deprecated Use matches_allowed_pattern? instead
|
34
|
+
def matches_ignored_pattern?
|
35
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
36
|
+
`matches_ignored_pattern?` is deprecated. Use `matches_allowed_pattern?` instead.
|
37
|
+
WARNING
|
38
|
+
|
39
|
+
matches_allowed_pattern?
|
40
|
+
end
|
29
41
|
|
30
42
|
def allowed_patterns
|
31
43
|
# Since there could be a pattern specified in the default config, merge the two
|
@@ -4,11 +4,15 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
# Handles `Max` configuration parameters, especially setting them to an
|
6
6
|
# appropriate value with --auto-gen-config.
|
7
|
-
# @deprecated Use `exclude_limit ParameterName
|
7
|
+
# @deprecated Use `exclude_limit <ParameterName>` instead.
|
8
8
|
module ConfigurableMax
|
9
9
|
private
|
10
10
|
|
11
11
|
def max=(value)
|
12
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
13
|
+
`max=` is deprecated. Use `exclude_limit <ParameterName>` instead.
|
14
|
+
WARNING
|
15
|
+
|
12
16
|
cfg = config_to_allow_offenses
|
13
17
|
cfg[:exclude_limit] ||= {}
|
14
18
|
current_max = cfg[:exclude_limit][max_parameter_name]
|
@@ -18,6 +18,10 @@ module RuboCop
|
|
18
18
|
|
19
19
|
# @deprecated Use ResbodyNode#exceptions instead
|
20
20
|
def rescued_exceptions(resbody)
|
21
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
22
|
+
`rescued_exceptions` is deprecated. Use `ResbodyNode#exceptions` instead.
|
23
|
+
WARNING
|
24
|
+
|
21
25
|
rescue_group, = *resbody
|
22
26
|
if rescue_group
|
23
27
|
rescue_group.values
|
@@ -148,7 +148,7 @@ module RuboCop
|
|
148
148
|
|
149
149
|
restarg, kwrestarg, blockarg = extract_forwardable_args(node.arguments)
|
150
150
|
forwardable_args = redundant_forwardable_named_args(restarg, kwrestarg, blockarg)
|
151
|
-
send_nodes = node.each_descendant(:send, :csend, :super).to_a
|
151
|
+
send_nodes = node.each_descendant(:send, :csend, :super, :yield).to_a
|
152
152
|
|
153
153
|
send_classifications = classify_send_nodes(
|
154
154
|
node, send_nodes, non_splat_or_block_pass_lvar_references(node.body), forwardable_args
|