rubocop 0.72.0 → 0.73.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/config/default.yml +13 -0
- data/lib/rubocop.rb +2 -0
- data/lib/rubocop/ast/node.rb +8 -8
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +16 -5
- data/lib/rubocop/ast/traversal.rb +3 -3
- data/lib/rubocop/cop/autocorrect_logic.rb +71 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/commissioner.rb +3 -9
- data/lib/rubocop/cop/cop.rb +36 -6
- data/lib/rubocop/cop/corrector.rb +2 -3
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +1 -1
- data/lib/rubocop/cop/layout/indent_first_argument.rb +1 -1
- data/lib/rubocop/cop/layout/indent_heredoc.rb +3 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -1
- data/lib/rubocop/cop/layout/leading_comment_space.rb +28 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -4
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +14 -2
- data/lib/rubocop/cop/layout/tab.rb +10 -22
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +3 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -3
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +2 -2
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +5 -5
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/unified_integer.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +2 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -6
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +1 -1
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -4
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/security/eval.rb +1 -1
- data/lib/rubocop/cop/security/json_load.rb +1 -1
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -1
- data/lib/rubocop/cop/security/yaml_load.rb +1 -1
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +1 -1
- data/lib/rubocop/cop/style/constant_visibility.rb +1 -1
- data/lib/rubocop/cop/style/date_time.rb +3 -3
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +49 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +2 -2
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
- data/lib/rubocop/cop/style/float_division.rb +4 -4
- data/lib/rubocop/cop/style/format_string.rb +7 -7
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
- data/lib/rubocop/cop/style/min_max.rb +1 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +3 -3
- data/lib/rubocop/cop/style/numeric_predicate.rb +3 -3
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +2 -2
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +6 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +2 -2
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
- data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +1 -1
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -2
- data/lib/rubocop/cop/style/strip.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_sort.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +5 -5
- data/lib/rubocop/cop/team.rb +15 -14
- data/lib/rubocop/error.rb +23 -0
- data/lib/rubocop/node_pattern.rb +2 -2
- data/lib/rubocop/options.rb +17 -0
- data/lib/rubocop/rspec/shared_contexts.rb +12 -0
- data/lib/rubocop/target_finder.rb +6 -4
- data/lib/rubocop/version.rb +1 -1
- metadata +4 -2
@@ -40,7 +40,7 @@ module RuboCop
|
|
40
40
|
MSG = '`%<assignment>s` method calls already given on line '\
|
41
41
|
'%<line_of_first_occurrence>d of the gemspec.'
|
42
42
|
|
43
|
-
def_node_search :gem_specification,
|
43
|
+
def_node_search :gem_specification, <<~PATTERN
|
44
44
|
(block
|
45
45
|
(send
|
46
46
|
(const
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
49
49
|
(arg $_)) ...)
|
50
50
|
PATTERN
|
51
51
|
|
52
|
-
def_node_search :assignment_method_declarations,
|
52
|
+
def_node_search :assignment_method_declarations, <<~PATTERN
|
53
53
|
(send
|
54
54
|
(lvar #match_block_variable_name?) #assignment_method? ...)
|
55
55
|
PATTERN
|
@@ -97,7 +97,7 @@ module RuboCop
|
|
97
97
|
node.method_name
|
98
98
|
end
|
99
99
|
|
100
|
-
def_node_search :dependency_declarations,
|
100
|
+
def_node_search :dependency_declarations, <<~PATTERN
|
101
101
|
(send (lvar _) {:add_dependency :add_runtime_dependency :add_development_dependency} ...)
|
102
102
|
PATTERN
|
103
103
|
end
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
41
41
|
'(%<target_ruby_version>s, which may be specified in ' \
|
42
42
|
'.rubocop.yml) should be equal.'
|
43
43
|
|
44
|
-
def_node_search :required_ruby_version,
|
44
|
+
def_node_search :required_ruby_version, <<~PATTERN
|
45
45
|
(send _ :required_ruby_version= ${(str _) (array (str _))})
|
46
46
|
PATTERN
|
47
47
|
|
@@ -19,11 +19,11 @@ module RuboCop
|
|
19
19
|
MSG = 'Use the methods provided with the node extensions instead ' \
|
20
20
|
'of manually destructuring nodes.'
|
21
21
|
|
22
|
-
def_node_matcher :node_variable?,
|
22
|
+
def_node_matcher :node_variable?, <<~PATTERN
|
23
23
|
{(lvar [#node_suffix? _]) (send nil? [#node_suffix? _])}
|
24
24
|
PATTERN
|
25
25
|
|
26
|
-
def_node_matcher :node_destructuring?,
|
26
|
+
def_node_matcher :node_destructuring?, <<~PATTERN
|
27
27
|
{(masgn (mlhs ...) {(send #node_variable? :children) (array (splat #node_variable?))})}
|
28
28
|
PATTERN
|
29
29
|
|
@@ -33,11 +33,11 @@ module RuboCop
|
|
33
33
|
|
34
34
|
private
|
35
35
|
|
36
|
-
def_node_matcher :node_type_check,
|
36
|
+
def_node_matcher :node_type_check, <<~PATTERN
|
37
37
|
(send nil? :add_offense $_node $hash)
|
38
38
|
PATTERN
|
39
39
|
|
40
|
-
def_node_matcher :offending_location_argument,
|
40
|
+
def_node_matcher :offending_location_argument, <<~PATTERN
|
41
41
|
(pair (sym :location) $(send (send $_node :loc) $_keyword))
|
42
42
|
PATTERN
|
43
43
|
|
@@ -21,7 +21,7 @@ module RuboCop
|
|
21
21
|
|
22
22
|
MSG = 'Redundant location argument to `#add_offense`.'
|
23
23
|
|
24
|
-
def_node_matcher :redundant_location_argument,
|
24
|
+
def_node_matcher :redundant_location_argument, <<~PATTERN
|
25
25
|
(send nil? :add_offense _
|
26
26
|
(hash <$(pair (sym :location) (sym :expression)) ...>)
|
27
27
|
)
|
@@ -24,11 +24,11 @@ module RuboCop
|
|
24
24
|
|
25
25
|
MSG = 'Redundant message argument to `#add_offense`.'
|
26
26
|
|
27
|
-
def_node_matcher :node_type_check,
|
27
|
+
def_node_matcher :node_type_check, <<~PATTERN
|
28
28
|
(send nil? :add_offense $_node $hash)
|
29
29
|
PATTERN
|
30
30
|
|
31
|
-
def_node_matcher :redundant_message_argument,
|
31
|
+
def_node_matcher :redundant_message_argument, <<~PATTERN
|
32
32
|
(pair
|
33
33
|
(sym :message)
|
34
34
|
${(const nil? :MSG) (send nil? :message) (send nil? :message _)})
|
@@ -16,11 +16,11 @@ module RuboCop
|
|
16
16
|
class UselessMessageAssertion < Cop
|
17
17
|
MSG = 'Do not specify cop behavior using `described_class::MSG`.'
|
18
18
|
|
19
|
-
def_node_search :described_class_msg,
|
19
|
+
def_node_search :described_class_msg, <<~PATTERN
|
20
20
|
(const (send nil? :described_class) :MSG)
|
21
21
|
PATTERN
|
22
22
|
|
23
|
-
def_node_matcher :rspec_expectation_on_msg?,
|
23
|
+
def_node_matcher :rspec_expectation_on_msg?, <<~PATTERN
|
24
24
|
(send (send nil? :expect #contains_described_class_msg?) :to ...)
|
25
25
|
PATTERN
|
26
26
|
|
@@ -142,7 +142,7 @@ module RuboCop
|
|
142
142
|
MSG = '`%<category>s` is supposed to appear before ' \
|
143
143
|
'`%<previous>s`.'
|
144
144
|
|
145
|
-
def_node_matcher :visibility_block?,
|
145
|
+
def_node_matcher :visibility_block?, <<~PATTERN
|
146
146
|
(send nil? { :private :protected :public })
|
147
147
|
PATTERN
|
148
148
|
|
@@ -37,7 +37,7 @@ module RuboCop
|
|
37
37
|
# # good
|
38
38
|
# # When EnforcedStyle is powerpack, bad code is auto-corrected to
|
39
39
|
# # the following code.
|
40
|
-
#
|
40
|
+
# <<-RUBY.strip_indent
|
41
41
|
# something
|
42
42
|
# RUBY
|
43
43
|
#
|
@@ -206,7 +206,8 @@ module RuboCop
|
|
206
206
|
body = heredoc_body(node)
|
207
207
|
body_indent_level = indent_level(body)
|
208
208
|
correct_indent_level = base_indent_level(node) + indentation_width
|
209
|
-
body.gsub(
|
209
|
+
body.gsub(/^[^\S\r\n]{#{body_indent_level}}/,
|
210
|
+
' ' * correct_indent_level)
|
210
211
|
end
|
211
212
|
|
212
213
|
def indented_end(node)
|
@@ -52,7 +52,7 @@ module RuboCop
|
|
52
52
|
MSG = 'Use %<configured_indentation_width>d (not %<indentation>d) ' \
|
53
53
|
'spaces for%<name>s indentation.'
|
54
54
|
|
55
|
-
def_node_matcher :access_modifier?,
|
55
|
+
def_node_matcher :access_modifier?, <<~PATTERN
|
56
56
|
[(send ...) access_modifier?]
|
57
57
|
PATTERN
|
58
58
|
|
@@ -16,6 +16,25 @@ module RuboCop
|
|
16
16
|
#
|
17
17
|
# # good
|
18
18
|
# # Some comment
|
19
|
+
#
|
20
|
+
# @example AllowDoxygenCommentStyle: false (default)
|
21
|
+
#
|
22
|
+
# # bad
|
23
|
+
#
|
24
|
+
# #**
|
25
|
+
# # Some comment
|
26
|
+
# # Another line of comment
|
27
|
+
# #*
|
28
|
+
#
|
29
|
+
# @example AllowDoxygenCommentStyle: true
|
30
|
+
#
|
31
|
+
# # good
|
32
|
+
#
|
33
|
+
# #**
|
34
|
+
# # Some comment
|
35
|
+
# # Another line of comment
|
36
|
+
# #*
|
37
|
+
#
|
19
38
|
class LeadingCommentSpace < Cop
|
20
39
|
include RangeHelp
|
21
40
|
|
@@ -25,6 +44,7 @@ module RuboCop
|
|
25
44
|
processed_source.each_comment do |comment|
|
26
45
|
next unless comment.text =~ /\A#+[^#\s=:+-]/
|
27
46
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
47
|
+
next if allow_doxygen_comment? && doxygen_comment_style?(comment)
|
28
48
|
|
29
49
|
add_offense(comment)
|
30
50
|
end
|
@@ -54,6 +74,14 @@ module RuboCop
|
|
54
74
|
def rackup_config_file?
|
55
75
|
File.basename(processed_source.file_path).eql?('config.ru')
|
56
76
|
end
|
77
|
+
|
78
|
+
def allow_doxygen_comment?
|
79
|
+
cop_config['AllowDoxygenCommentStyle']
|
80
|
+
end
|
81
|
+
|
82
|
+
def doxygen_comment_style?(comment)
|
83
|
+
comment.text.start_with?('#*')
|
84
|
+
end
|
57
85
|
end
|
58
86
|
end
|
59
87
|
end
|
@@ -30,6 +30,8 @@ module RuboCop
|
|
30
30
|
ANCESTOR_TYPES = %i[kwbegin def defs class module].freeze
|
31
31
|
RUBY_2_5_ANCESTOR_TYPES = (ANCESTOR_TYPES + %i[block]).freeze
|
32
32
|
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS = %i[def defs].freeze
|
33
|
+
ALTERNATIVE_ACCESS_MODIFIERS = %i[public_class_method
|
34
|
+
private_class_method].freeze
|
33
35
|
|
34
36
|
def on_resbody(node)
|
35
37
|
check(node) unless modifier?(node)
|
@@ -99,8 +101,12 @@ module RuboCop
|
|
99
101
|
case node.type
|
100
102
|
when :block, :kwbegin
|
101
103
|
node.loc.begin
|
102
|
-
when :def, :defs, :class, :module
|
104
|
+
when :def, :defs, :class, :module,
|
105
|
+
:lvasgn, :ivasgn, :cvasgn, :gvasgn, :casgn
|
103
106
|
node.loc.name
|
107
|
+
when :masgn
|
108
|
+
mlhs_node, = *node
|
109
|
+
mlhs_node.loc.expression
|
104
110
|
else
|
105
111
|
# It is a wrapper with access modifier.
|
106
112
|
node.child_nodes.first.loc.name
|
@@ -150,9 +156,7 @@ module RuboCop
|
|
150
156
|
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS.include?(node.type)
|
151
157
|
|
152
158
|
access_modifier_node = node.ancestors.first
|
153
|
-
return nil unless
|
154
|
-
access_modifier_node.respond_to?(:access_modifier?) &&
|
155
|
-
access_modifier_node.access_modifier?
|
159
|
+
return nil unless access_modifier?(access_modifier_node)
|
156
160
|
|
157
161
|
access_modifier_node
|
158
162
|
end
|
@@ -169,6 +173,16 @@ module RuboCop
|
|
169
173
|
|
170
174
|
range_between(begin_pos - current_column, begin_pos)
|
171
175
|
end
|
176
|
+
|
177
|
+
def access_modifier?(node)
|
178
|
+
return true if node.respond_to?(:access_modifier?) &&
|
179
|
+
node.access_modifier?
|
180
|
+
|
181
|
+
return true if node.respond_to?(:method_name) &&
|
182
|
+
ALTERNATIVE_ACCESS_MODIFIERS.include?(node.method_name)
|
183
|
+
|
184
|
+
false
|
185
|
+
end
|
172
186
|
end
|
173
187
|
end
|
174
188
|
end
|
@@ -130,7 +130,8 @@ module RuboCop
|
|
130
130
|
args_delimiter = node.arguments.loc.begin # Can be ( | or nil.
|
131
131
|
|
132
132
|
check_left_brace(inner, node.loc.begin, args_delimiter)
|
133
|
-
check_right_brace(inner, node.loc.
|
133
|
+
check_right_brace(inner, node.loc.begin, node.loc.end,
|
134
|
+
node.single_line?)
|
134
135
|
end
|
135
136
|
|
136
137
|
def check_left_brace(inner, left_brace, args_delimiter)
|
@@ -141,15 +142,26 @@ module RuboCop
|
|
141
142
|
end
|
142
143
|
end
|
143
144
|
|
144
|
-
def check_right_brace(inner, right_brace, single_line)
|
145
|
+
def check_right_brace(inner, left_brace, right_brace, single_line)
|
145
146
|
if single_line && inner =~ /\S$/
|
146
147
|
no_space(right_brace.begin_pos, right_brace.end_pos,
|
147
148
|
'Space missing inside }.')
|
148
149
|
else
|
150
|
+
return if multiline_block?(left_brace, right_brace) &&
|
151
|
+
aligned_braces?(left_brace, right_brace)
|
152
|
+
|
149
153
|
space_inside_right_brace(right_brace)
|
150
154
|
end
|
151
155
|
end
|
152
156
|
|
157
|
+
def multiline_block?(left_brace, right_brace)
|
158
|
+
left_brace.first_line != right_brace.first_line
|
159
|
+
end
|
160
|
+
|
161
|
+
def aligned_braces?(left_brace, right_brace)
|
162
|
+
left_brace.first_line == right_brace.last_column
|
163
|
+
end
|
164
|
+
|
153
165
|
def no_space_inside_left_brace(left_brace, args_delimiter)
|
154
166
|
if pipe?(args_delimiter)
|
155
167
|
if left_brace.end_pos == args_delimiter.begin_pos &&
|
@@ -30,16 +30,13 @@ module RuboCop
|
|
30
30
|
str_ranges = string_literal_ranges(processed_source.ast)
|
31
31
|
|
32
32
|
processed_source.lines.each.with_index(1) do |line, lineno|
|
33
|
-
match = line.match(
|
33
|
+
match = line.match(/\t+/)
|
34
34
|
next unless match
|
35
35
|
|
36
|
-
prefix = match.captures[0]
|
37
|
-
col = prefix.length
|
38
|
-
next if in_string_literal?(str_ranges, lineno, col)
|
39
|
-
|
40
36
|
range = source_range(processed_source.buffer,
|
41
37
|
lineno,
|
42
|
-
|
38
|
+
match.begin(0)...match.end(0))
|
39
|
+
next if in_string_literal?(str_ranges, range)
|
43
40
|
|
44
41
|
add_offense(range, location: range)
|
45
42
|
end
|
@@ -54,16 +51,9 @@ module RuboCop
|
|
54
51
|
|
55
52
|
private
|
56
53
|
|
57
|
-
|
58
|
-
|
59
|
-
ranges.any? do |range|
|
60
|
-
(range.line == line && range.column <= col) ||
|
61
|
-
(range.line < line && line < range.last_line) ||
|
62
|
-
(range.line != line && range.last_line == line &&
|
63
|
-
range.last_column >= col)
|
64
|
-
end
|
54
|
+
def in_string_literal?(ranges, tabs_range)
|
55
|
+
ranges.any? { |range| range.contains?(tabs_range) }
|
65
56
|
end
|
66
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
67
57
|
|
68
58
|
def string_literal_ranges(ast)
|
69
59
|
# which lines start inside a string literal?
|
@@ -72,13 +62,11 @@ module RuboCop
|
|
72
62
|
ast.each_node(:str, :dstr).each_with_object(Set.new) do |str, ranges|
|
73
63
|
loc = str.location
|
74
64
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
ranges << range
|
65
|
+
if str.heredoc?
|
66
|
+
ranges << loc.heredoc_body
|
67
|
+
elsif loc.respond_to?(:begin) && loc.begin
|
68
|
+
ranges << loc.expression
|
69
|
+
end
|
82
70
|
end
|
83
71
|
end
|
84
72
|
end
|
@@ -18,7 +18,7 @@ module RuboCop
|
|
18
18
|
MSG = '`%<double_colon>sBigDecimal.new()` is deprecated. ' \
|
19
19
|
'Use `%<double_colon>sBigDecimal()` instead.'
|
20
20
|
|
21
|
-
def_node_matcher :big_decimal_new,
|
21
|
+
def_node_matcher :big_decimal_new, <<~PATTERN
|
22
22
|
(send
|
23
23
|
(const ${nil? cbase} :BigDecimal) :new ...)
|
24
24
|
PATTERN
|
@@ -35,14 +35,14 @@ module RuboCop
|
|
35
35
|
class Debugger < Cop
|
36
36
|
MSG = 'Remove debugger entry point `%<source>s`.'
|
37
37
|
|
38
|
-
def_node_matcher :kernel?,
|
38
|
+
def_node_matcher :kernel?, <<~PATTERN
|
39
39
|
{
|
40
40
|
(const nil? :Kernel)
|
41
41
|
(const (cbase) :Kernel)
|
42
42
|
}
|
43
43
|
PATTERN
|
44
44
|
|
45
|
-
def_node_matcher :debugger_call?,
|
45
|
+
def_node_matcher :debugger_call?, <<~PATTERN
|
46
46
|
{(send {nil? #kernel?} {:debugger :byebug} ...)
|
47
47
|
(send (send {#kernel? nil?} :binding)
|
48
48
|
{:pry :remote_pry :pry_remote} ...)
|
@@ -52,7 +52,7 @@ module RuboCop
|
|
52
52
|
:save_screenshot} ...)}
|
53
53
|
PATTERN
|
54
54
|
|
55
|
-
def_node_matcher :binding_irb_call?,
|
55
|
+
def_node_matcher :binding_irb_call?, <<~PATTERN
|
56
56
|
(send (send {#kernel? nil?} :binding) :irb ...)
|
57
57
|
PATTERN
|
58
58
|
|
@@ -79,7 +79,7 @@ module RuboCop
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
-
def_node_matcher :method_alias?,
|
82
|
+
def_node_matcher :method_alias?, <<~PATTERN
|
83
83
|
(alias (sym $_name) sym)
|
84
84
|
PATTERN
|
85
85
|
|
@@ -91,11 +91,11 @@ module RuboCop
|
|
91
91
|
found_instance_method(node, name)
|
92
92
|
end
|
93
93
|
|
94
|
-
def_node_matcher :alias_method?,
|
94
|
+
def_node_matcher :alias_method?, <<~PATTERN
|
95
95
|
(send nil? :alias_method (sym $_name) _)
|
96
96
|
PATTERN
|
97
97
|
|
98
|
-
def_node_matcher :attr?,
|
98
|
+
def_node_matcher :attr?, <<~PATTERN
|
99
99
|
(send nil? ${:attr_reader :attr_writer :attr_accessor :attr} $...)
|
100
100
|
PATTERN
|
101
101
|
|