rubocop 0.75.1 → 0.76.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 +52 -53
- data/lib/rubocop.rb +10 -9
- data/lib/rubocop/ast/builder.rb +1 -0
- data/lib/rubocop/ast/node.rb +4 -0
- data/lib/rubocop/ast/node/return_node.rb +24 -0
- data/lib/rubocop/cli.rb +7 -4
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +7 -0
- data/lib/rubocop/config_loader.rb +1 -1
- data/lib/rubocop/config_loader_resolver.rb +2 -1
- data/lib/rubocop/config_obsoletion.rb +9 -0
- data/lib/rubocop/config_validator.rb +24 -15
- data/lib/rubocop/cop/commissioner.rb +15 -7
- data/lib/rubocop/cop/cop.rb +10 -6
- data/lib/rubocop/cop/corrector.rb +8 -7
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
- data/lib/rubocop/cop/layout/align_hash.rb +6 -2
- data/lib/rubocop/cop/layout/comment_indentation.rb +10 -13
- data/lib/rubocop/cop/layout/empty_comment.rb +7 -16
- data/lib/rubocop/cop/layout/end_of_line.rb +8 -3
- data/lib/rubocop/cop/layout/indent_first_argument.rb +9 -7
- data/lib/rubocop/cop/layout/indent_first_hash_element.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +2 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -7
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +7 -4
- data/lib/rubocop/cop/layout/space_inside_parens.rb +6 -6
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +18 -2
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +9 -8
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/{unneeded_cop_disable_directive.rb → redundant_cop_disable_directive.rb} +23 -23
- data/lib/rubocop/cop/lint/{unneeded_cop_enable_directive.rb → redundant_cop_enable_directive.rb} +6 -8
- data/lib/rubocop/cop/lint/{unneeded_require_statement.rb → redundant_require_statement.rb} +1 -1
- data/lib/rubocop/cop/lint/{unneeded_splat_expansion.rb → redundant_splat_expansion.rb} +5 -5
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +5 -6
- data/lib/rubocop/cop/lint/void.rb +4 -4
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/line_length.rb +1 -4
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +23 -6
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +5 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +8 -6
- data/lib/rubocop/cop/naming/file_name.rb +12 -5
- data/lib/rubocop/cop/registry.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +2 -2
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +6 -6
- data/lib/rubocop/cop/style/comment_annotation.rb +5 -5
- data/lib/rubocop/cop/style/copyright.rb +11 -7
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +2 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +2 -2
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/format_string.rb +10 -7
- data/lib/rubocop/cop/style/format_string_token.rb +2 -0
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +10 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +9 -2
- data/lib/rubocop/cop/style/infinite_loop.rb +4 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +19 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +14 -10
- data/lib/rubocop/cop/style/method_def_parentheses.rb +17 -9
- data/lib/rubocop/cop/style/multiline_when_then.rb +1 -1
- data/lib/rubocop/cop/style/nested_modifier.rb +4 -2
- data/lib/rubocop/cop/style/non_nil_check.rb +21 -9
- data/lib/rubocop/cop/style/{unneeded_capital_w.rb → redundant_capital_w.rb} +1 -1
- data/lib/rubocop/cop/style/{unneeded_condition.rb → redundant_condition.rb} +3 -3
- data/lib/rubocop/cop/style/{unneeded_interpolation.rb → redundant_interpolation.rb} +1 -1
- data/lib/rubocop/cop/style/{unneeded_percent_q.rb → redundant_percent_q.rb} +1 -1
- data/lib/rubocop/cop/style/redundant_return.rb +25 -21
- data/lib/rubocop/cop/style/{unneeded_sort.rb → redundant_sort.rb} +4 -4
- data/lib/rubocop/cop/style/safe_navigation.rb +13 -10
- data/lib/rubocop/cop/style/semicolon.rb +2 -2
- data/lib/rubocop/cop/style/special_global_vars.rb +5 -7
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/format_string.rb +10 -18
- data/lib/rubocop/cop/variable_force.rb +7 -5
- data/lib/rubocop/node_pattern.rb +3 -1
- data/lib/rubocop/options.rb +12 -6
- data/lib/rubocop/result_cache.rb +1 -1
- data/lib/rubocop/runner.rb +32 -27
- data/lib/rubocop/target_finder.rb +12 -6
- data/lib/rubocop/version.rb +1 -1
- metadata +12 -11
@@ -64,17 +64,25 @@ module RuboCop
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def remove_irrelevant_cops(filename)
|
67
|
-
@cops.reject! { |cop| cop.excluded_file?(filename) }
|
68
67
|
@cops.reject! do |cop|
|
69
|
-
cop.
|
70
|
-
!
|
71
|
-
|
72
|
-
@cops.reject! do |cop|
|
73
|
-
cop.class.respond_to?(:support_target_rails_version?) &&
|
74
|
-
!cop.class.support_target_rails_version?(cop.target_rails_version)
|
68
|
+
cop.excluded_file?(filename) ||
|
69
|
+
!support_target_ruby_version?(cop) ||
|
70
|
+
!support_target_rails_version?(cop)
|
75
71
|
end
|
76
72
|
end
|
77
73
|
|
74
|
+
def support_target_ruby_version?(cop)
|
75
|
+
return true unless cop.class.respond_to?(:support_target_ruby_version?)
|
76
|
+
|
77
|
+
cop.class.support_target_ruby_version?(cop.target_ruby_version)
|
78
|
+
end
|
79
|
+
|
80
|
+
def support_target_rails_version?(cop)
|
81
|
+
return true unless cop.class.respond_to?(:support_target_rails_version?)
|
82
|
+
|
83
|
+
cop.class.support_target_rails_version?(cop.target_rails_version)
|
84
|
+
end
|
85
|
+
|
78
86
|
def reset_callbacks
|
79
87
|
@callbacks.clear
|
80
88
|
end
|
data/lib/rubocop/cop/cop.rb
CHANGED
@@ -123,23 +123,19 @@ module RuboCop
|
|
123
123
|
self.class::MSG
|
124
124
|
end
|
125
125
|
|
126
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
127
126
|
def add_offense(node, location: :expression, message: nil, severity: nil)
|
128
127
|
loc = find_location(node, location)
|
129
128
|
|
130
129
|
return if duplicate_location?(loc)
|
131
130
|
|
132
|
-
severity =
|
133
|
-
|
134
|
-
message ||= message(node)
|
135
|
-
message = annotate(message)
|
131
|
+
severity = find_severity(node, severity)
|
132
|
+
message = find_message(node, message)
|
136
133
|
|
137
134
|
status = enabled_line?(loc.line) ? correct(node) : :disabled
|
138
135
|
|
139
136
|
@offenses << Offense.new(severity, loc, message, name, status)
|
140
137
|
yield if block_given? && status != :disabled
|
141
138
|
end
|
142
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
143
139
|
|
144
140
|
def find_location(node, loc)
|
145
141
|
# Location can be provided as a symbol, e.g.: `:keyword`
|
@@ -223,6 +219,10 @@ module RuboCop
|
|
223
219
|
|
224
220
|
private
|
225
221
|
|
222
|
+
def find_message(node, message)
|
223
|
+
annotate(message || message(node))
|
224
|
+
end
|
225
|
+
|
226
226
|
def annotate(message)
|
227
227
|
RuboCop::Cop::MessageAnnotator.new(
|
228
228
|
config, cop_name, cop_config, @options
|
@@ -250,6 +250,10 @@ module RuboCop
|
|
250
250
|
@processed_source.comment_config.cop_enabled_at_line?(self, line_number)
|
251
251
|
end
|
252
252
|
|
253
|
+
def find_severity(_node, severity)
|
254
|
+
custom_severity || severity || default_severity
|
255
|
+
end
|
256
|
+
|
253
257
|
def default_severity
|
254
258
|
self.class.lint? ? :warning : :convention
|
255
259
|
end
|
@@ -154,16 +154,17 @@ module RuboCop
|
|
154
154
|
|
155
155
|
# :nodoc:
|
156
156
|
def validate_range(range)
|
157
|
-
|
157
|
+
buffer = range.source_buffer
|
158
|
+
return if buffer == @source_buffer
|
158
159
|
|
159
|
-
unless
|
160
|
+
unless buffer.is_a?(Parser::Source::Buffer)
|
160
161
|
# actually this should be enforced by parser gem
|
161
|
-
raise 'Corrector expected range source buffer to be a '\
|
162
|
-
"Parser::Source::Buffer, but got #{
|
162
|
+
raise 'Corrector expected range source buffer to be a ' \
|
163
|
+
"Parser::Source::Buffer, but got #{buffer.class}"
|
163
164
|
end
|
164
|
-
raise "Correction target buffer #{
|
165
|
-
"name:#{
|
166
|
-
" is not current #{@source_buffer.object_id} "\
|
165
|
+
raise "Correction target buffer #{buffer.object_id} " \
|
166
|
+
"name:#{buffer.name.inspect}" \
|
167
|
+
" is not current #{@source_buffer.object_id} " \
|
167
168
|
"name:#{@source_buffer.name.inspect} under investigation"
|
168
169
|
end
|
169
170
|
end
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
24
24
|
def inject
|
25
25
|
target_line = find_target_line
|
26
26
|
if target_line
|
27
|
-
configuration_entries.insert(
|
27
|
+
configuration_entries.insert(target_line,
|
28
28
|
new_configuration_entry + "\n")
|
29
29
|
else
|
30
30
|
configuration_entries.push("\n" + new_configuration_entry)
|
@@ -220,14 +220,18 @@ module RuboCop
|
|
220
220
|
|
221
221
|
private
|
222
222
|
|
223
|
+
def reset!
|
224
|
+
self.offences_by = {}
|
225
|
+
self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
|
226
|
+
end
|
227
|
+
|
223
228
|
def double_splat?(node)
|
224
229
|
node.children.last.is_a?(Symbol)
|
225
230
|
end
|
226
231
|
|
227
232
|
def check_pairs(node)
|
228
233
|
first_pair = node.pairs.first
|
229
|
-
|
230
|
-
self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
|
234
|
+
reset!
|
231
235
|
|
232
236
|
alignment_for(first_pair).each do |alignment|
|
233
237
|
delta = alignment.deltas_for_first_pair(first_pair, node)
|
@@ -55,23 +55,20 @@ module RuboCop
|
|
55
55
|
# of correcting, saving the file, parsing and inspecting again, and
|
56
56
|
# then correcting one more line, and so on.
|
57
57
|
def autocorrect_preceding_comments(comment)
|
58
|
-
corrections = []
|
59
|
-
line_no = comment.loc.line
|
60
|
-
column = comment.loc.column
|
61
58
|
comments = processed_source.comments
|
62
|
-
|
63
|
-
previous_comment = comments[ix]
|
64
|
-
break unless should_correct?(previous_comment, column, line_no - 1)
|
59
|
+
index = comments.index(comment)
|
65
60
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
61
|
+
comments[0..index]
|
62
|
+
.reverse_each
|
63
|
+
.each_cons(2)
|
64
|
+
.take_while { |below, above| should_correct?(above, below) }
|
65
|
+
.map { |_, above| autocorrect_one(above) }
|
70
66
|
end
|
71
67
|
|
72
|
-
def should_correct?(
|
73
|
-
loc =
|
74
|
-
|
68
|
+
def should_correct?(preceding_comment, reference_comment)
|
69
|
+
loc = preceding_comment.loc
|
70
|
+
ref_loc = reference_comment.loc
|
71
|
+
loc.line == ref_loc.line - 1 && loc.column == ref_loc.column
|
75
72
|
end
|
76
73
|
|
77
74
|
def autocorrect_one(comment)
|
@@ -103,19 +103,12 @@ module RuboCop
|
|
103
103
|
private
|
104
104
|
|
105
105
|
def concat_consecutive_comments(comments)
|
106
|
-
|
106
|
+
consecutive_comments =
|
107
|
+
comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
|
107
108
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
last_concatenated_comment[0] << comment_text(comment)
|
113
|
-
last_concatenated_comment[1] << comment
|
114
|
-
else
|
115
|
-
concatenated_comments << [comment_text(comment).dup, [comment]]
|
116
|
-
end
|
117
|
-
|
118
|
-
prev_line = comment.loc.line
|
109
|
+
consecutive_comments.map do |chunk|
|
110
|
+
joined_text = chunk.map { |c| comment_text(c) }.join
|
111
|
+
[joined_text, chunk]
|
119
112
|
end
|
120
113
|
end
|
121
114
|
|
@@ -141,11 +134,9 @@ module RuboCop
|
|
141
134
|
cop_config['AllowMarginComment']
|
142
135
|
end
|
143
136
|
|
144
|
-
def current_token(
|
137
|
+
def current_token(comment)
|
145
138
|
processed_source.find_token do |token|
|
146
|
-
token.pos
|
147
|
-
token.pos.last_column == node.loc.last_column &&
|
148
|
-
token.line == node.loc.line
|
139
|
+
token.pos == comment.loc.expression
|
149
140
|
end
|
150
141
|
end
|
151
142
|
|
@@ -45,9 +45,7 @@ module RuboCop
|
|
45
45
|
MSG_MISSING = 'Carriage return character missing.'
|
46
46
|
|
47
47
|
def investigate(processed_source)
|
48
|
-
|
49
|
-
last_line =
|
50
|
-
last_token ? last_token.line : processed_source.lines.length
|
48
|
+
last_line = last_line(processed_source)
|
51
49
|
|
52
50
|
processed_source.raw_source.each_line.with_index do |line, index|
|
53
51
|
break if index >= last_line
|
@@ -81,6 +79,13 @@ module RuboCop
|
|
81
79
|
else MSG_MISSING if line !~ /\r$/
|
82
80
|
end
|
83
81
|
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def last_line(processed_source)
|
86
|
+
last_token = processed_source.tokens.last
|
87
|
+
last_token ? last_token.line : processed_source.lines.length
|
88
|
+
end
|
84
89
|
end
|
85
90
|
end
|
86
91
|
end
|
@@ -228,19 +228,21 @@ module RuboCop
|
|
228
228
|
# containing the previous line that's not a comment line or a blank
|
229
229
|
# line.
|
230
230
|
def previous_code_line(line_number)
|
231
|
-
@comment_lines ||=
|
232
|
-
processed_source
|
233
|
-
.comments
|
234
|
-
.select { |c| begins_its_line?(c.loc.expression) }
|
235
|
-
.map { |c| c.loc.line }
|
236
|
-
|
237
231
|
line = ''
|
238
|
-
while line.blank? ||
|
232
|
+
while line.blank? || comment_lines.include?(line_number)
|
239
233
|
line_number -= 1
|
240
234
|
line = processed_source.lines[line_number - 1]
|
241
235
|
end
|
242
236
|
line
|
243
237
|
end
|
238
|
+
|
239
|
+
def comment_lines
|
240
|
+
@comment_lines ||=
|
241
|
+
processed_source
|
242
|
+
.comments
|
243
|
+
.select { |c| begins_its_line?(c.loc.expression) }
|
244
|
+
.map { |c| c.loc.line }
|
245
|
+
end
|
244
246
|
end
|
245
247
|
end
|
246
248
|
end
|
@@ -113,7 +113,7 @@ module RuboCop
|
|
113
113
|
first_pair = hash_node.pairs.first
|
114
114
|
|
115
115
|
if first_pair
|
116
|
-
return if first_pair.
|
116
|
+
return if first_pair.first_line == left_brace.line
|
117
117
|
|
118
118
|
if separator_style?(first_pair)
|
119
119
|
check_based_on_longest_key(hash_node, left_brace,
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
43
43
|
'on the same line as the assignment operator `=`.'
|
44
44
|
|
45
45
|
def check_assignment(node, rhs)
|
46
|
-
return if node.send_type?
|
46
|
+
return if node.send_type? && node.loc.operator&.source != '='
|
47
47
|
return unless rhs
|
48
48
|
return unless supported_types.include?(rhs.type)
|
49
49
|
return if rhs.first_line == rhs.last_line
|
@@ -96,6 +96,7 @@ module RuboCop
|
|
96
96
|
)
|
97
97
|
end
|
98
98
|
|
99
|
+
# rubocop:disable Metrics/AbcSize
|
99
100
|
def alignment_source(node, starting_loc)
|
100
101
|
ending_loc =
|
101
102
|
case node.type
|
@@ -114,6 +115,7 @@ module RuboCop
|
|
114
115
|
|
115
116
|
range_between(starting_loc.begin_pos, ending_loc.end_pos).source
|
116
117
|
end
|
118
|
+
# rubocop:enable Metrics/AbcSize
|
117
119
|
|
118
120
|
# We will use ancestor or wrapper with access modifier.
|
119
121
|
|
@@ -48,9 +48,7 @@ module RuboCop
|
|
48
48
|
if style == :require_space
|
49
49
|
corrector.insert_before(children[1].source_range, ' ')
|
50
50
|
else
|
51
|
-
|
52
|
-
children[1].source_range.begin_pos)
|
53
|
-
corrector.remove(space_range)
|
51
|
+
corrector.remove(space_after_arrow(lambda_node))
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|
@@ -62,10 +60,14 @@ module RuboCop
|
|
62
60
|
end
|
63
61
|
|
64
62
|
def space_after_arrow?(lambda_node)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
63
|
+
!space_after_arrow(lambda_node).empty?
|
64
|
+
end
|
65
|
+
|
66
|
+
def space_after_arrow(lambda_node)
|
67
|
+
arrow = lambda_node.parent.children[0].source_range
|
68
|
+
parentheses = lambda_node.parent.children[1].source_range
|
69
|
+
|
70
|
+
arrow.end.join(parentheses.begin)
|
69
71
|
end
|
70
72
|
|
71
73
|
def range_of_offense(node)
|
@@ -210,18 +210,21 @@ module RuboCop
|
|
210
210
|
|
211
211
|
def compact_corrections(corrector, node, left, right)
|
212
212
|
if qualifies_for_compact?(node, left, side: :left)
|
213
|
-
|
214
|
-
corrector.remove(range)
|
213
|
+
compact(corrector, left, :right)
|
215
214
|
elsif !left.space_after?
|
216
215
|
corrector.insert_after(left.pos, ' ')
|
217
216
|
end
|
218
217
|
if qualifies_for_compact?(node, right)
|
219
|
-
|
220
|
-
corrector.remove(range)
|
218
|
+
compact(corrector, right, :left)
|
221
219
|
elsif !right.space_before?
|
222
220
|
corrector.insert_before(right.pos, ' ')
|
223
221
|
end
|
224
222
|
end
|
223
|
+
|
224
|
+
def compact(corrector, bracket, side)
|
225
|
+
range = side_space_range(range: bracket.pos, side: side)
|
226
|
+
corrector.remove(range)
|
227
|
+
end
|
225
228
|
end
|
226
229
|
end
|
227
230
|
end
|
@@ -72,7 +72,7 @@ module RuboCop
|
|
72
72
|
# If the second token is a comment, that means that a line break
|
73
73
|
# follows, and that the rules for space inside don't apply.
|
74
74
|
next if token2.comment?
|
75
|
-
next unless token2
|
75
|
+
next unless same_line?(token1, token2) && token1.space_after?
|
76
76
|
|
77
77
|
yield range_between(token1.end_pos, token2.begin_pos)
|
78
78
|
end
|
@@ -82,17 +82,18 @@ module RuboCop
|
|
82
82
|
tokens.each_cons(2) do |token1, token2|
|
83
83
|
next if can_be_ignored?(token1, token2)
|
84
84
|
|
85
|
-
next unless token2.line == token1.line && !token1.space_after?
|
86
|
-
|
87
85
|
if token1.left_parens?
|
88
86
|
yield range_between(token2.begin_pos, token2.begin_pos + 1)
|
89
|
-
|
90
87
|
elsif token2.right_parens?
|
91
88
|
yield range_between(token2.begin_pos, token2.end_pos)
|
92
89
|
end
|
93
90
|
end
|
94
91
|
end
|
95
92
|
|
93
|
+
def same_line?(token1, token2)
|
94
|
+
token1.line == token2.line
|
95
|
+
end
|
96
|
+
|
96
97
|
def parens?(token1, token2)
|
97
98
|
token1.left_parens? || token2.right_parens?
|
98
99
|
end
|
@@ -104,8 +105,7 @@ module RuboCop
|
|
104
105
|
# follows, and that the rules for space inside don't apply.
|
105
106
|
return true if token2.comment?
|
106
107
|
|
107
|
-
|
108
|
-
return true if token1.left_parens? && token2.right_parens?
|
108
|
+
return true unless same_line?(token1, token2) && !token1.space_after?
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end
|
@@ -14,6 +14,20 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# x = 0
|
16
16
|
#
|
17
|
+
# @example AllowInHeredoc: false (default)
|
18
|
+
# # The line in this example contains spaces after the 0.
|
19
|
+
# # bad
|
20
|
+
# code = <<~RUBY
|
21
|
+
# x = 0
|
22
|
+
# RUBY
|
23
|
+
#
|
24
|
+
# @example AllowInHeredoc: true
|
25
|
+
# # The line in this example contains spaces after the 0.
|
26
|
+
# # good
|
27
|
+
# code = <<~RUBY
|
28
|
+
# x = 0
|
29
|
+
# RUBY
|
30
|
+
#
|
17
31
|
class TrailingWhitespace < Cop
|
18
32
|
include RangeHelp
|
19
33
|
|
@@ -22,11 +36,13 @@ module RuboCop
|
|
22
36
|
def investigate(processed_source)
|
23
37
|
heredoc_ranges = extract_heredoc_ranges(processed_source.ast)
|
24
38
|
processed_source.lines.each_with_index do |line, index|
|
39
|
+
lineno = index + 1
|
40
|
+
|
25
41
|
next unless line.end_with?(' ', "\t")
|
26
|
-
next if skip_heredoc? && inside_heredoc?(heredoc_ranges,
|
42
|
+
next if skip_heredoc? && inside_heredoc?(heredoc_ranges, lineno)
|
27
43
|
|
28
44
|
range = source_range(processed_source.buffer,
|
29
|
-
|
45
|
+
lineno,
|
30
46
|
(line.rstrip.length)...(line.length))
|
31
47
|
|
32
48
|
add_offense(range, location: range)
|
@@ -86,13 +86,13 @@ module RuboCop
|
|
86
86
|
erb_new_with_non_keyword_arguments(node) do |arguments|
|
87
87
|
return if correct_arguments?(arguments)
|
88
88
|
|
89
|
-
1.
|
90
|
-
next if !
|
89
|
+
arguments[1..3].each_with_index do |argument, i|
|
90
|
+
next if !argument || argument.hash_type?
|
91
91
|
|
92
|
-
message = format(MESSAGES[i
|
92
|
+
message = format(MESSAGES[i], arg_value: argument.source)
|
93
93
|
|
94
94
|
add_offense(
|
95
|
-
node, location:
|
95
|
+
node, location: argument.source_range, message: message
|
96
96
|
)
|
97
97
|
end
|
98
98
|
end
|
@@ -138,14 +138,15 @@ module RuboCop
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def override_by_legacy_args(kwargs, node)
|
141
|
+
arguments = node.arguments
|
141
142
|
overridden_kwargs = kwargs.dup
|
142
143
|
|
143
|
-
if
|
144
|
-
overridden_kwargs[0] = "trim_mode: #{
|
144
|
+
if arguments[2]
|
145
|
+
overridden_kwargs[0] = "trim_mode: #{arguments[2].source}"
|
145
146
|
end
|
146
147
|
|
147
|
-
if
|
148
|
-
overridden_kwargs[1] = "eoutvar: #{
|
148
|
+
if arguments[3] && !arguments[3].hash_type?
|
149
|
+
overridden_kwargs[1] = "eoutvar: #{arguments[3].source}"
|
149
150
|
end
|
150
151
|
|
151
152
|
overridden_kwargs
|