rubocop 1.68.0 → 1.69.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 +41 -6
- data/lib/rubocop/cop/base.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -1
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -3
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -4
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +3 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +7 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +15 -0
- data/lib/rubocop/cop/layout/line_length.rb +118 -4
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +2 -3
- data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
- data/lib/rubocop/cop/layout/redundant_line_break.rb +3 -35
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +16 -17
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +6 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +4 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +6 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -1
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +14 -6
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -3
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -0
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/mixed_case_range.rb +2 -5
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -2
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +106 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +12 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +3 -7
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +2 -0
- data/lib/rubocop/cop/lint/self_assignment.rb +8 -10
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +3 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +51 -2
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
- data/lib/rubocop/cop/lint/void.rb +3 -2
- data/lib/rubocop/cop/metrics/class_length.rb +7 -7
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +2 -3
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +5 -9
- data/lib/rubocop/cop/mixin/range_help.rb +0 -1
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
- data/lib/rubocop/cop/naming/constant_name.rb +6 -7
- data/lib/rubocop/cop/naming/file_name.rb +0 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +11 -12
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +3 -11
- data/lib/rubocop/cop/naming/variable_name.rb +3 -4
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/security/compound_hash.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +54 -25
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/array_intersect.rb +5 -4
- data/lib/rubocop/cop/style/bitwise_predicate.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +10 -2
- data/lib/rubocop/cop/style/case_like_if.rb +8 -11
- data/lib/rubocop/cop/style/commented_keyword.rb +11 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +19 -21
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/fetch_env_var.rb +1 -0
- data/lib/rubocop/cop/style/file_null.rb +73 -0
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/for.rb +0 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +1 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -2
- data/lib/rubocop/cop/style/hash_except.rb +19 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +0 -1
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +1 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +14 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +0 -1
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +2 -2
- data/lib/rubocop/cop/style/lambda_call.rb +3 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +7 -11
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -5
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +6 -4
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +1 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +25 -4
- data/lib/rubocop/cop/style/operator_method_call.rb +5 -6
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +8 -13
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +3 -1
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +36 -21
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +7 -6
- data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +1 -0
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +8 -15
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +7 -5
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +2 -3
- data/lib/rubocop/cop/style/safe_navigation.rb +1 -1
- data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
- data/lib/rubocop/cop/style/self_assignment.rb +11 -17
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +13 -3
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +2 -3
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +13 -12
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/variable_force.rb +4 -10
- data/lib/rubocop/cops_documentation_generator.rb +9 -1
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +8 -0
- metadata +23 -14
@@ -37,33 +37,29 @@ module RuboCop
|
|
37
37
|
private
|
38
38
|
|
39
39
|
def check(node, var_type)
|
40
|
-
|
41
|
-
return unless rhs
|
40
|
+
return unless (rhs = node.expression)
|
42
41
|
|
43
|
-
if rhs.send_type?
|
44
|
-
check_send_node(node, rhs,
|
42
|
+
if rhs.send_type? && rhs.arguments.one?
|
43
|
+
check_send_node(node, rhs, node.name, var_type)
|
45
44
|
elsif rhs.operator_keyword?
|
46
|
-
check_boolean_node(node, rhs,
|
45
|
+
check_boolean_node(node, rhs, node.name, var_type)
|
47
46
|
end
|
48
47
|
end
|
49
48
|
|
50
49
|
def check_send_node(node, rhs, var_name, var_type)
|
51
|
-
|
52
|
-
return unless OPS.include?(method_name)
|
50
|
+
return unless OPS.include?(rhs.method_name)
|
53
51
|
|
54
52
|
target_node = s(var_type, var_name)
|
55
|
-
return unless receiver == target_node
|
53
|
+
return unless rhs.receiver == target_node
|
56
54
|
|
57
|
-
add_offense(node, message: format(MSG, method: method_name)) do |corrector|
|
55
|
+
add_offense(node, message: format(MSG, method: rhs.method_name)) do |corrector|
|
58
56
|
autocorrect(corrector, node)
|
59
57
|
end
|
60
58
|
end
|
61
59
|
|
62
60
|
def check_boolean_node(node, rhs, var_name, var_type)
|
63
|
-
first_operand, _second_operand = *rhs
|
64
|
-
|
65
61
|
target_node = s(var_type, var_name)
|
66
|
-
return unless
|
62
|
+
return unless rhs.lhs == target_node
|
67
63
|
|
68
64
|
operator = rhs.loc.operator.source
|
69
65
|
add_offense(node, message: format(MSG, method: operator)) do |corrector|
|
@@ -72,7 +68,7 @@ module RuboCop
|
|
72
68
|
end
|
73
69
|
|
74
70
|
def autocorrect(corrector, node)
|
75
|
-
|
71
|
+
rhs = node.expression
|
76
72
|
|
77
73
|
if rhs.send_type?
|
78
74
|
autocorrect_send_node(corrector, node, rhs)
|
@@ -82,13 +78,11 @@ module RuboCop
|
|
82
78
|
end
|
83
79
|
|
84
80
|
def autocorrect_send_node(corrector, node, rhs)
|
85
|
-
|
86
|
-
apply_autocorrect(corrector, node, rhs, method_name.to_s, args)
|
81
|
+
apply_autocorrect(corrector, node, rhs, rhs.method_name, rhs.first_argument)
|
87
82
|
end
|
88
83
|
|
89
84
|
def autocorrect_boolean_node(corrector, node, rhs)
|
90
|
-
|
91
|
-
apply_autocorrect(corrector, node, rhs, rhs.loc.operator.source, second_operand)
|
85
|
+
apply_autocorrect(corrector, node, rhs, rhs.loc.operator.source, rhs.rhs)
|
92
86
|
end
|
93
87
|
|
94
88
|
def apply_autocorrect(corrector, node, rhs, operator, new_rhs)
|
@@ -122,10 +122,9 @@ module RuboCop
|
|
122
122
|
def on_rescue(node)
|
123
123
|
return unless style == :semantic
|
124
124
|
|
125
|
-
|
126
|
-
check_scope(:raise, begin_node)
|
125
|
+
check_scope(:raise, node.body)
|
127
126
|
|
128
|
-
|
127
|
+
node.resbody_branches.each do |rescue_node|
|
129
128
|
check_scope(:fail, rescue_node)
|
130
129
|
allow(:raise, rescue_node)
|
131
130
|
end
|
@@ -33,22 +33,19 @@ module RuboCop
|
|
33
33
|
#
|
34
34
|
class SingleArgumentDig < Base
|
35
35
|
extend AutoCorrector
|
36
|
+
include DigHelp
|
36
37
|
|
37
38
|
MSG = 'Use `%<receiver>s[%<argument>s]` instead of `%<original>s`.'
|
38
39
|
RESTRICT_ON_SEND = %i[dig].freeze
|
39
40
|
IGNORED_ARGUMENT_TYPES = %i[block_pass forwarded_restarg forwarded_args hash].freeze
|
40
41
|
|
41
|
-
# @!method single_argument_dig?(node)
|
42
|
-
def_node_matcher :single_argument_dig?, <<~PATTERN
|
43
|
-
(send _ :dig $!splat)
|
44
|
-
PATTERN
|
45
|
-
|
46
42
|
def on_send(node)
|
47
43
|
return unless node.receiver
|
48
44
|
|
49
45
|
expression = single_argument_dig?(node)
|
50
46
|
return unless expression
|
51
47
|
return if IGNORED_ARGUMENT_TYPES.include?(expression.type)
|
48
|
+
return if ignore_dig_chain?(node)
|
52
49
|
|
53
50
|
receiver = node.receiver.source
|
54
51
|
argument = expression.source
|
@@ -63,6 +60,13 @@ module RuboCop
|
|
63
60
|
|
64
61
|
ignore_node(node)
|
65
62
|
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def ignore_dig_chain?(node)
|
67
|
+
dig_chain_enabled? &&
|
68
|
+
(dig?(node.receiver) || dig?(node.parent))
|
69
|
+
end
|
66
70
|
end
|
67
71
|
end
|
68
72
|
end
|
@@ -6,8 +6,13 @@ module RuboCop
|
|
6
6
|
# Checks for single-line `do`...`end` block.
|
7
7
|
#
|
8
8
|
# In practice a single line `do`...`end` is autocorrected when `EnforcedStyle: semantic`
|
9
|
-
#
|
10
|
-
# preserve semantics and does not change it to `{`...`}` block.
|
9
|
+
# is configured for `Style/BlockDelimiters`. The autocorrection maintains the
|
10
|
+
# `do` ... `end` syntax to preserve semantics and does not change it to `{`...`}` block.
|
11
|
+
#
|
12
|
+
# NOTE: If `InspectBlocks` is set to `true` for `Layout/RedundantLineBreak`, blocks will
|
13
|
+
# be autocorrected to be on a single line if possible. This cop respects that configuration
|
14
|
+
# by not registering an offense if it would subsequently cause a
|
15
|
+
# `Layout/RedundantLineBreak` offense.
|
11
16
|
#
|
12
17
|
# @example
|
13
18
|
#
|
@@ -27,12 +32,14 @@ module RuboCop
|
|
27
32
|
#
|
28
33
|
class SingleLineDoEndBlock < Base
|
29
34
|
extend AutoCorrector
|
35
|
+
include CheckSingleLineSuitability
|
30
36
|
|
31
37
|
MSG = 'Prefer multiline `do`...`end` block.'
|
32
38
|
|
33
39
|
# rubocop:disable Metrics/AbcSize
|
34
40
|
def on_block(node)
|
35
41
|
return if !node.single_line? || node.braces?
|
42
|
+
return if single_line_blocks_preferred? && suitable_as_single_line?(node)
|
36
43
|
|
37
44
|
add_offense(node) do |corrector|
|
38
45
|
corrector.insert_after(do_line(node), "\n")
|
@@ -60,7 +67,10 @@ module RuboCop
|
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
63
|
-
def
|
70
|
+
def single_line_blocks_preferred?
|
71
|
+
redundant_line_break_config = @config.for_cop('Layout/RedundantLineBreak')
|
72
|
+
redundant_line_break_config['Enabled'] && redundant_line_break_config['InspectBlocks']
|
73
|
+
end
|
64
74
|
end
|
65
75
|
end
|
66
76
|
end
|
@@ -214,7 +214,7 @@ module RuboCop
|
|
214
214
|
end
|
215
215
|
|
216
216
|
def insert_bang_for_and(corrector, node)
|
217
|
-
lhs, rhs = *node
|
217
|
+
lhs, rhs = *node # rubocop:disable InternalAffairs/NodeDestructuring
|
218
218
|
|
219
219
|
if lhs.and_type?
|
220
220
|
insert_bang_for_and(corrector, lhs)
|
@@ -237,8 +237,7 @@ module RuboCop
|
|
237
237
|
end
|
238
238
|
|
239
239
|
def wrap_condition?(node)
|
240
|
-
node.
|
241
|
-
(node.call_type? && node.arguments.any? && !node.parenthesized?)
|
240
|
+
node.operator_keyword? || (node.call_type? && node.arguments.any? && !node.parenthesized?)
|
242
241
|
end
|
243
242
|
|
244
243
|
def replace_condition(condition)
|
@@ -51,7 +51,6 @@ module RuboCop
|
|
51
51
|
# Pathname.new('/') + 'test'
|
52
52
|
#
|
53
53
|
class StringConcatenation < Base
|
54
|
-
include Util
|
55
54
|
include RangeHelp
|
56
55
|
extend AutoCorrector
|
57
56
|
|
@@ -143,22 +142,24 @@ module RuboCop
|
|
143
142
|
end
|
144
143
|
|
145
144
|
def replacement(parts)
|
146
|
-
interpolated_parts =
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
else
|
155
|
-
"\#{#{part.source}}"
|
156
|
-
end
|
145
|
+
interpolated_parts = parts.map do |part|
|
146
|
+
case part.type
|
147
|
+
when :str
|
148
|
+
adjust_str(part)
|
149
|
+
when :dstr
|
150
|
+
part.children.all?(&:str_type?) ? adjust_str(part) : contents_range(part).source
|
151
|
+
else
|
152
|
+
"\#{#{part.source}}"
|
157
153
|
end
|
154
|
+
end
|
158
155
|
|
159
156
|
"\"#{handle_quotes(interpolated_parts).join}\""
|
160
157
|
end
|
161
158
|
|
159
|
+
def adjust_str(node)
|
160
|
+
single_quoted?(node) ? node.value.gsub(/(\\|")/, '\\\\\&') : node.value.inspect[1..-2]
|
161
|
+
end
|
162
|
+
|
162
163
|
def handle_quotes(parts)
|
163
164
|
parts.map do |part|
|
164
165
|
part == '"' ? '\"' : part
|
@@ -79,26 +79,15 @@ module RuboCop
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def lhs(node)
|
82
|
-
|
83
|
-
|
84
|
-
namespace, name, = *node
|
85
|
-
if namespace
|
86
|
-
"#{namespace.const_name}::#{name}"
|
87
|
-
else
|
88
|
-
name.to_s
|
89
|
-
end
|
82
|
+
if node.casgn_type?
|
83
|
+
"#{'::' if node.absolute?}#{node.const_name}"
|
90
84
|
else
|
91
|
-
node.
|
85
|
+
node.name.to_s
|
92
86
|
end
|
93
87
|
end
|
94
88
|
|
95
89
|
def rhs(node)
|
96
|
-
|
97
|
-
when :casgn
|
98
|
-
node.children[2].source
|
99
|
-
else
|
100
|
-
node.children[1].source
|
101
|
-
end
|
90
|
+
node.expression.source
|
102
91
|
end
|
103
92
|
|
104
93
|
def correction_range(tmp_assign, y_assign)
|
@@ -94,7 +94,7 @@ module RuboCop
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def unneeded_ranges(node)
|
97
|
-
node.masgn_type? ?
|
97
|
+
mlhs_node = node.masgn_type? ? node.lhs : node
|
98
98
|
variables = *mlhs_node
|
99
99
|
|
100
100
|
main_offense = main_node_offense(node)
|
@@ -106,15 +106,15 @@ module RuboCop
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def main_node_offense(node)
|
109
|
-
node.masgn_type? ?
|
110
|
-
|
109
|
+
mlhs_node = node.masgn_type? ? node.lhs : node
|
111
110
|
variables = *mlhs_node
|
111
|
+
|
112
112
|
first_offense = find_first_offense(variables)
|
113
113
|
|
114
114
|
return unless first_offense
|
115
115
|
|
116
116
|
if unused_variables_only?(first_offense, variables)
|
117
|
-
return unused_range(node.type, mlhs_node,
|
117
|
+
return unused_range(node.type, mlhs_node, node.rhs)
|
118
118
|
end
|
119
119
|
|
120
120
|
return range_for_parentheses(first_offense, mlhs_node) if Util.parentheses?(mlhs_node)
|
@@ -19,8 +19,7 @@ module RuboCop
|
|
19
19
|
include Interpolation
|
20
20
|
extend AutoCorrector
|
21
21
|
|
22
|
-
MSG = 'Replace interpolated variable `%<variable>s` '
|
23
|
-
'with expression `#{%<variable>s}`.' # rubocop:disable Lint/InterpolationCheck
|
22
|
+
MSG = 'Replace interpolated variable `%<variable>s` with expression `#{%<variable>s}`.'
|
24
23
|
|
25
24
|
def on_node_with_interpolations(node)
|
26
25
|
var_nodes(node.children).each do |var_node|
|
@@ -194,15 +194,10 @@ module RuboCop
|
|
194
194
|
end
|
195
195
|
|
196
196
|
def process_variable_operator_assignment(node)
|
197
|
-
|
198
|
-
asgn_node, rhs_node = *node
|
199
|
-
else
|
200
|
-
asgn_node, _operator, rhs_node = *node
|
201
|
-
end
|
202
|
-
|
197
|
+
asgn_node = node.lhs
|
203
198
|
return unless asgn_node.lvasgn_type?
|
204
199
|
|
205
|
-
name = asgn_node.
|
200
|
+
name = asgn_node.name
|
206
201
|
|
207
202
|
variable_table.declare_variable(name, asgn_node) unless variable_table.variable_exist?(name)
|
208
203
|
|
@@ -222,7 +217,7 @@ module RuboCop
|
|
222
217
|
# before processing rhs nodes.
|
223
218
|
|
224
219
|
variable_table.reference_variable(name, node)
|
225
|
-
process_node(
|
220
|
+
process_node(node.rhs)
|
226
221
|
variable_table.assign_to_variable(name, asgn_node)
|
227
222
|
|
228
223
|
skip_children!
|
@@ -355,8 +350,7 @@ module RuboCop
|
|
355
350
|
when :lvasgn
|
356
351
|
AssignmentReference.new(node)
|
357
352
|
when *OPERATOR_ASSIGNMENT_TYPES
|
358
|
-
|
359
|
-
VariableReference.new(asgn_node.children.first) if asgn_node.lvasgn_type?
|
353
|
+
VariableReference.new(node.lhs.name) if node.lhs.lvasgn_type?
|
360
354
|
end
|
361
355
|
end
|
362
356
|
|
@@ -114,7 +114,15 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
114
114
|
def required_ruby_version(cop)
|
115
115
|
return '' unless cop.respond_to?(:required_minimum_ruby_version)
|
116
116
|
|
117
|
-
|
117
|
+
if cop.required_minimum_ruby_version
|
118
|
+
requirement = cop.required_minimum_ruby_version
|
119
|
+
elsif cop.required_maximum_ruby_version
|
120
|
+
requirement = "<= #{cop.required_maximum_ruby_version}"
|
121
|
+
else
|
122
|
+
return ''
|
123
|
+
end
|
124
|
+
|
125
|
+
"NOTE: Requires Ruby version #{requirement}\n\n"
|
118
126
|
end
|
119
127
|
|
120
128
|
# rubocop:disable Metrics/MethodLength
|
data/lib/rubocop/version.rb
CHANGED
data/lib/rubocop.rb
CHANGED
@@ -78,12 +78,14 @@ require_relative 'rubocop/cop/mixin/allowed_receivers'
|
|
78
78
|
require_relative 'rubocop/cop/mixin/auto_corrector' # rubocop:todo Naming/InclusiveLanguage
|
79
79
|
require_relative 'rubocop/cop/mixin/check_assignment'
|
80
80
|
require_relative 'rubocop/cop/mixin/check_line_breakable'
|
81
|
+
require_relative 'rubocop/cop/mixin/check_single_line_suitability'
|
81
82
|
require_relative 'rubocop/cop/mixin/configurable_max'
|
82
83
|
require_relative 'rubocop/cop/mixin/code_length' # relies on configurable_max
|
83
84
|
require_relative 'rubocop/cop/mixin/configurable_enforced_style'
|
84
85
|
require_relative 'rubocop/cop/mixin/configurable_formatting'
|
85
86
|
require_relative 'rubocop/cop/mixin/configurable_naming'
|
86
87
|
require_relative 'rubocop/cop/mixin/configurable_numbering'
|
88
|
+
require_relative 'rubocop/cop/mixin/dig_help'
|
87
89
|
require_relative 'rubocop/cop/mixin/documentation_comment'
|
88
90
|
require_relative 'rubocop/cop/mixin/duplication'
|
89
91
|
require_relative 'rubocop/cop/mixin/range_help'
|
@@ -333,6 +335,7 @@ require_relative 'rubocop/cop/lint/float_comparison'
|
|
333
335
|
require_relative 'rubocop/cop/lint/float_out_of_range'
|
334
336
|
require_relative 'rubocop/cop/lint/format_parameter_mismatch'
|
335
337
|
require_relative 'rubocop/cop/lint/hash_compare_by_identity'
|
338
|
+
require_relative 'rubocop/cop/lint/hash_new_with_keyword_arguments_as_default'
|
336
339
|
require_relative 'rubocop/cop/lint/heredoc_method_call_position'
|
337
340
|
require_relative 'rubocop/cop/lint/identity_comparison'
|
338
341
|
require_relative 'rubocop/cop/lint/implicit_string_concatenation'
|
@@ -360,6 +363,7 @@ require_relative 'rubocop/cop/lint/non_deterministic_require_order'
|
|
360
363
|
require_relative 'rubocop/cop/lint/non_local_exit_from_iterator'
|
361
364
|
require_relative 'rubocop/cop/lint/number_conversion'
|
362
365
|
require_relative 'rubocop/cop/lint/numbered_parameter_assignment'
|
366
|
+
require_relative 'rubocop/cop/lint/numeric_operation_with_constant_result'
|
363
367
|
require_relative 'rubocop/cop/lint/or_assignment_to_constant'
|
364
368
|
require_relative 'rubocop/cop/lint/ordered_magic_comments'
|
365
369
|
require_relative 'rubocop/cop/lint/out_of_range_regexp_ref'
|
@@ -417,6 +421,7 @@ require_relative 'rubocop/cop/lint/uri_escape_unescape'
|
|
417
421
|
require_relative 'rubocop/cop/lint/uri_regexp'
|
418
422
|
require_relative 'rubocop/cop/lint/useless_access_modifier'
|
419
423
|
require_relative 'rubocop/cop/lint/useless_assignment'
|
424
|
+
require_relative 'rubocop/cop/lint/useless_defined'
|
420
425
|
require_relative 'rubocop/cop/lint/useless_else_without_rescue'
|
421
426
|
require_relative 'rubocop/cop/lint/useless_method_definition'
|
422
427
|
require_relative 'rubocop/cop/lint/useless_numeric_operation'
|
@@ -505,6 +510,7 @@ require_relative 'rubocop/cop/style/copyright'
|
|
505
510
|
require_relative 'rubocop/cop/style/data_inheritance'
|
506
511
|
require_relative 'rubocop/cop/style/date_time'
|
507
512
|
require_relative 'rubocop/cop/style/def_with_parentheses'
|
513
|
+
require_relative 'rubocop/cop/style/dig_chain'
|
508
514
|
require_relative 'rubocop/cop/style/dir'
|
509
515
|
require_relative 'rubocop/cop/style/dir_empty'
|
510
516
|
require_relative 'rubocop/cop/style/disable_cops_within_source_code_directive'
|
@@ -534,7 +540,9 @@ require_relative 'rubocop/cop/style/explicit_block_argument'
|
|
534
540
|
require_relative 'rubocop/cop/style/exponential_notation'
|
535
541
|
require_relative 'rubocop/cop/style/fetch_env_var'
|
536
542
|
require_relative 'rubocop/cop/style/file_empty'
|
543
|
+
require_relative 'rubocop/cop/style/file_null'
|
537
544
|
require_relative 'rubocop/cop/style/file_read'
|
545
|
+
require_relative 'rubocop/cop/style/file_touch'
|
538
546
|
require_relative 'rubocop/cop/style/file_write'
|
539
547
|
require_relative 'rubocop/cop/style/float_division'
|
540
548
|
require_relative 'rubocop/cop/style/for'
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.69.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
8
8
|
- Jonas Arvidsson
|
9
9
|
- Yuji Nakayama
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2024-
|
13
|
+
date: 2024-12-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
requirements:
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 2.9.3
|
98
98
|
- - "<"
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: '3.0'
|
@@ -104,7 +104,7 @@ dependencies:
|
|
104
104
|
requirements:
|
105
105
|
- - ">="
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version:
|
107
|
+
version: 2.9.3
|
108
108
|
- - "<"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '3.0'
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.
|
117
|
+
version: 1.36.2
|
118
118
|
- - "<"
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: '2.0'
|
@@ -124,7 +124,7 @@ dependencies:
|
|
124
124
|
requirements:
|
125
125
|
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: 1.
|
127
|
+
version: 1.36.2
|
128
128
|
- - "<"
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '2.0'
|
@@ -151,7 +151,7 @@ dependencies:
|
|
151
151
|
version: 2.4.0
|
152
152
|
- - "<"
|
153
153
|
- !ruby/object:Gem::Version
|
154
|
-
version: '
|
154
|
+
version: '4.0'
|
155
155
|
type: :runtime
|
156
156
|
prerelease: false
|
157
157
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -161,7 +161,7 @@ dependencies:
|
|
161
161
|
version: 2.4.0
|
162
162
|
- - "<"
|
163
163
|
- !ruby/object:Gem::Version
|
164
|
-
version: '
|
164
|
+
version: '4.0'
|
165
165
|
description: |
|
166
166
|
RuboCop is a Ruby code style checking and code formatting tool.
|
167
167
|
It aims to enforce the community-driven Ruby Style Guide.
|
@@ -282,6 +282,7 @@ files:
|
|
282
282
|
- lib/rubocop/cop/internal_affairs/node_type_predicate.rb
|
283
283
|
- lib/rubocop/cop/internal_affairs/numblock_handler.rb
|
284
284
|
- lib/rubocop/cop/internal_affairs/offense_location_keyword.rb
|
285
|
+
- lib/rubocop/cop/internal_affairs/operator_keyword.rb
|
285
286
|
- lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb
|
286
287
|
- lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb
|
287
288
|
- lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb
|
@@ -445,6 +446,7 @@ files:
|
|
445
446
|
- lib/rubocop/cop/lint/float_out_of_range.rb
|
446
447
|
- lib/rubocop/cop/lint/format_parameter_mismatch.rb
|
447
448
|
- lib/rubocop/cop/lint/hash_compare_by_identity.rb
|
449
|
+
- lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb
|
448
450
|
- lib/rubocop/cop/lint/heredoc_method_call_position.rb
|
449
451
|
- lib/rubocop/cop/lint/identity_comparison.rb
|
450
452
|
- lib/rubocop/cop/lint/implicit_string_concatenation.rb
|
@@ -472,6 +474,7 @@ files:
|
|
472
474
|
- lib/rubocop/cop/lint/non_local_exit_from_iterator.rb
|
473
475
|
- lib/rubocop/cop/lint/number_conversion.rb
|
474
476
|
- lib/rubocop/cop/lint/numbered_parameter_assignment.rb
|
477
|
+
- lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb
|
475
478
|
- lib/rubocop/cop/lint/or_assignment_to_constant.rb
|
476
479
|
- lib/rubocop/cop/lint/ordered_magic_comments.rb
|
477
480
|
- lib/rubocop/cop/lint/out_of_range_regexp_ref.rb
|
@@ -529,6 +532,7 @@ files:
|
|
529
532
|
- lib/rubocop/cop/lint/uri_regexp.rb
|
530
533
|
- lib/rubocop/cop/lint/useless_access_modifier.rb
|
531
534
|
- lib/rubocop/cop/lint/useless_assignment.rb
|
535
|
+
- lib/rubocop/cop/lint/useless_defined.rb
|
532
536
|
- lib/rubocop/cop/lint/useless_else_without_rescue.rb
|
533
537
|
- lib/rubocop/cop/lint/useless_method_definition.rb
|
534
538
|
- lib/rubocop/cop/lint/useless_numeric_operation.rb
|
@@ -565,6 +569,7 @@ files:
|
|
565
569
|
- lib/rubocop/cop/mixin/auto_corrector.rb
|
566
570
|
- lib/rubocop/cop/mixin/check_assignment.rb
|
567
571
|
- lib/rubocop/cop/mixin/check_line_breakable.rb
|
572
|
+
- lib/rubocop/cop/mixin/check_single_line_suitability.rb
|
568
573
|
- lib/rubocop/cop/mixin/code_length.rb
|
569
574
|
- lib/rubocop/cop/mixin/comments_help.rb
|
570
575
|
- lib/rubocop/cop/mixin/configurable_enforced_style.rb
|
@@ -573,6 +578,7 @@ files:
|
|
573
578
|
- lib/rubocop/cop/mixin/configurable_naming.rb
|
574
579
|
- lib/rubocop/cop/mixin/configurable_numbering.rb
|
575
580
|
- lib/rubocop/cop/mixin/def_node.rb
|
581
|
+
- lib/rubocop/cop/mixin/dig_help.rb
|
576
582
|
- lib/rubocop/cop/mixin/documentation_comment.rb
|
577
583
|
- lib/rubocop/cop/mixin/duplication.rb
|
578
584
|
- lib/rubocop/cop/mixin/empty_lines_around_body.rb
|
@@ -701,6 +707,7 @@ files:
|
|
701
707
|
- lib/rubocop/cop/style/data_inheritance.rb
|
702
708
|
- lib/rubocop/cop/style/date_time.rb
|
703
709
|
- lib/rubocop/cop/style/def_with_parentheses.rb
|
710
|
+
- lib/rubocop/cop/style/dig_chain.rb
|
704
711
|
- lib/rubocop/cop/style/dir.rb
|
705
712
|
- lib/rubocop/cop/style/dir_empty.rb
|
706
713
|
- lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb
|
@@ -730,7 +737,9 @@ files:
|
|
730
737
|
- lib/rubocop/cop/style/exponential_notation.rb
|
731
738
|
- lib/rubocop/cop/style/fetch_env_var.rb
|
732
739
|
- lib/rubocop/cop/style/file_empty.rb
|
740
|
+
- lib/rubocop/cop/style/file_null.rb
|
733
741
|
- lib/rubocop/cop/style/file_read.rb
|
742
|
+
- lib/rubocop/cop/style/file_touch.rb
|
734
743
|
- lib/rubocop/cop/style/file_write.rb
|
735
744
|
- lib/rubocop/cop/style/float_division.rb
|
736
745
|
- lib/rubocop/cop/style/for.rb
|
@@ -1026,12 +1035,12 @@ licenses:
|
|
1026
1035
|
- MIT
|
1027
1036
|
metadata:
|
1028
1037
|
homepage_uri: https://rubocop.org/
|
1029
|
-
changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.
|
1038
|
+
changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.69.1
|
1030
1039
|
source_code_uri: https://github.com/rubocop/rubocop/
|
1031
|
-
documentation_uri: https://docs.rubocop.org/rubocop/1.
|
1040
|
+
documentation_uri: https://docs.rubocop.org/rubocop/1.69/
|
1032
1041
|
bug_tracker_uri: https://github.com/rubocop/rubocop/issues
|
1033
1042
|
rubygems_mfa_required: 'true'
|
1034
|
-
post_install_message:
|
1043
|
+
post_install_message:
|
1035
1044
|
rdoc_options: []
|
1036
1045
|
require_paths:
|
1037
1046
|
- lib
|
@@ -1046,8 +1055,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1046
1055
|
- !ruby/object:Gem::Version
|
1047
1056
|
version: '0'
|
1048
1057
|
requirements: []
|
1049
|
-
rubygems_version: 3.
|
1050
|
-
signing_key:
|
1058
|
+
rubygems_version: 3.3.7
|
1059
|
+
signing_key:
|
1051
1060
|
specification_version: 4
|
1052
1061
|
summary: Automatic Ruby code style checking tool.
|
1053
1062
|
test_files: []
|