rubocop 0.75.0 → 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 +53 -54
- 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/correctors/percent_literal_corrector.rb +1 -1
- 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/empty_line_after_guard_clause.rb +22 -7
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +8 -3
- data/lib/rubocop/cop/layout/indent_assignment.rb +2 -1
- 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/unused_block_argument.rb +22 -6
- data/lib/rubocop/cop/lint/unused_method_argument.rb +23 -5
- data/lib/rubocop/cop/lint/void.rb +7 -26
- 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/documentation_method.rb +44 -0
- 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/expand_path_arguments.rb +1 -1
- data/lib/rubocop/cop/style/format_string.rb +10 -7
- data/lib/rubocop/cop/style/format_string_token.rb +15 -34
- 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_call_with_args_parentheses.rb +20 -20
- 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 +37 -21
- data/lib/rubocop/cop/style/{unneeded_sort.rb → redundant_sort.rb} +4 -4
- data/lib/rubocop/cop/style/safe_navigation.rb +19 -8
- data/lib/rubocop/cop/style/semicolon.rb +13 -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/formatter/clang_style_formatter.rb +8 -3
- data/lib/rubocop/formatter/emacs_style_formatter.rb +22 -12
- data/lib/rubocop/formatter/file_list_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +16 -16
- data/lib/rubocop/formatter/pacman_formatter.rb +3 -3
- data/lib/rubocop/formatter/simple_text_formatter.rb +7 -3
- data/lib/rubocop/formatter/tap_formatter.rb +8 -3
- data/lib/rubocop/node_pattern.rb +3 -1
- data/lib/rubocop/options.rb +16 -22
- 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
@@ -49,11 +49,13 @@ module RuboCop
|
|
49
49
|
node.parent.condition.source_range.end_pos)
|
50
50
|
|
51
51
|
lambda do |corrector|
|
52
|
-
corrector.replace(range, new_expression(node
|
52
|
+
corrector.replace(range, new_expression(node))
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
def new_expression(
|
56
|
+
def new_expression(inner_node)
|
57
|
+
outer_node = inner_node.parent
|
58
|
+
|
57
59
|
operator = replacement_operator(outer_node.keyword)
|
58
60
|
lh_operand = left_hand_operand(outer_node, operator)
|
59
61
|
rh_operand = right_hand_operand(inner_node, outer_node.keyword)
|
@@ -5,27 +5,39 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop checks for non-nil checks, which are usually redundant.
|
7
7
|
#
|
8
|
-
#
|
8
|
+
# With `IncludeSemanticChanges` set to `false` by default, this cop
|
9
|
+
# does not report offenses for `!x.nil?` and does no changes that might
|
10
|
+
# change behavior.
|
11
|
+
#
|
12
|
+
# With `IncludeSemanticChanges` set to `true`, this cop reports offenses
|
13
|
+
# for `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which
|
14
|
+
# is **usually** OK, but might change behavior.
|
9
15
|
#
|
16
|
+
# @example
|
10
17
|
# # bad
|
11
18
|
# if x != nil
|
12
19
|
# end
|
13
20
|
#
|
14
|
-
# # good
|
15
|
-
# # bad (when allowing semantic changes)
|
16
|
-
# if !x.nil?
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# # good (when allowing semantic changes)
|
21
|
+
# # good
|
20
22
|
# if x
|
21
23
|
# end
|
22
24
|
#
|
23
|
-
# Non-nil checks are allowed if they are the final nodes of predicate.
|
24
|
-
#
|
25
|
+
# # Non-nil checks are allowed if they are the final nodes of predicate.
|
25
26
|
# # good
|
26
27
|
# def signed_in?
|
27
28
|
# !current_user.nil?
|
28
29
|
# end
|
30
|
+
#
|
31
|
+
# @example IncludeSemanticChanges: false (default)
|
32
|
+
# # good
|
33
|
+
# if !x.nil?
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# @example IncludeSemanticChanges: true
|
37
|
+
# # bad
|
38
|
+
# if !x.nil?
|
39
|
+
# end
|
40
|
+
#
|
29
41
|
class NonNilCheck < Cop
|
30
42
|
def_node_matcher :not_equal_to_nil?, '(send _ :!= nil)'
|
31
43
|
def_node_matcher :unless_check?, '(if (send _ :nil?) ...)'
|
@@ -30,11 +30,11 @@ module RuboCop
|
|
30
30
|
# c
|
31
31
|
# end
|
32
32
|
#
|
33
|
-
class
|
33
|
+
class RedundantCondition < Cop
|
34
34
|
include RangeHelp
|
35
35
|
|
36
36
|
MSG = 'Use double pipes `||` instead.'
|
37
|
-
|
37
|
+
REDUNDANT_CONDITION = 'This condition is not needed.'
|
38
38
|
|
39
39
|
def on_if(node)
|
40
40
|
return if node.elsif_conditional?
|
@@ -61,7 +61,7 @@ module RuboCop
|
|
61
61
|
|
62
62
|
def message(node)
|
63
63
|
if node.modifier_form? || !node.else_branch
|
64
|
-
|
64
|
+
REDUNDANT_CONDITION
|
65
65
|
else
|
66
66
|
MSG
|
67
67
|
end
|
@@ -17,7 +17,7 @@ module RuboCop
|
|
17
17
|
# time = "8 o'clock"
|
18
18
|
# question = '"What did you say?"'
|
19
19
|
#
|
20
|
-
class
|
20
|
+
class RedundantPercentQ < Cop
|
21
21
|
MSG = 'Use `%<q_type>s` only for strings that contain both ' \
|
22
22
|
'single quotes and double quotes%<extra>s.'
|
23
23
|
DYNAMIC_MSG = ', or for dynamic strings that contain ' \
|
@@ -35,6 +35,18 @@ module RuboCop
|
|
35
35
|
# end
|
36
36
|
# end
|
37
37
|
#
|
38
|
+
# @example AllowMultipleReturnValues: false (default)
|
39
|
+
# # bad
|
40
|
+
# def test
|
41
|
+
# return x, y
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# @example AllowMultipleReturnValues: true
|
45
|
+
# # good
|
46
|
+
# def test
|
47
|
+
# return x, y
|
48
|
+
# end
|
49
|
+
#
|
38
50
|
class RedundantReturn < Cop
|
39
51
|
include RangeHelp
|
40
52
|
|
@@ -48,27 +60,38 @@ module RuboCop
|
|
48
60
|
end
|
49
61
|
alias on_defs on_def
|
50
62
|
|
51
|
-
def autocorrect(node)
|
63
|
+
def autocorrect(node)
|
52
64
|
lambda do |corrector|
|
53
|
-
|
54
|
-
|
55
|
-
|
65
|
+
if node.arguments?
|
66
|
+
correct_with_arguments(node, corrector)
|
67
|
+
else
|
68
|
+
correct_without_arguments(node, corrector)
|
56
69
|
end
|
57
|
-
|
58
|
-
return_value, = *node
|
59
|
-
if node.children.size > 1
|
60
|
-
add_brackets(corrector, node)
|
61
|
-
elsif return_value.hash_type?
|
62
|
-
add_braces(corrector, return_value) unless return_value.braces?
|
63
|
-
end
|
64
|
-
return_kw = range_with_surrounding_space(range: node.loc.keyword,
|
65
|
-
side: :right)
|
66
|
-
corrector.remove(return_kw)
|
67
70
|
end
|
68
71
|
end
|
69
72
|
|
70
73
|
private
|
71
74
|
|
75
|
+
def correct_without_arguments(return_node, corrector)
|
76
|
+
corrector.replace(return_node.source_range, 'nil')
|
77
|
+
end
|
78
|
+
|
79
|
+
def correct_with_arguments(return_node, corrector)
|
80
|
+
if return_node.arguments.size > 1
|
81
|
+
add_brackets(corrector, return_node)
|
82
|
+
elsif hash_without_braces?(return_node.first_argument)
|
83
|
+
add_braces(corrector, return_node.first_argument)
|
84
|
+
end
|
85
|
+
|
86
|
+
keyword = range_with_surrounding_space(range: return_node.loc.keyword,
|
87
|
+
side: :right)
|
88
|
+
corrector.remove(keyword)
|
89
|
+
end
|
90
|
+
|
91
|
+
def hash_without_braces?(node)
|
92
|
+
node.hash_type? && !node.braces?
|
93
|
+
end
|
94
|
+
|
72
95
|
def add_brackets(corrector, node)
|
73
96
|
kids = node.children.map(&:source_range)
|
74
97
|
corrector.insert_before(kids.first, '[')
|
@@ -81,13 +104,6 @@ module RuboCop
|
|
81
104
|
corrector.insert_after(kids.last, '}')
|
82
105
|
end
|
83
106
|
|
84
|
-
def arguments?(args)
|
85
|
-
return false if args.empty?
|
86
|
-
return true if args.size > 1
|
87
|
-
|
88
|
-
!args.first.begin_type? || !args.first.children.empty?
|
89
|
-
end
|
90
|
-
|
91
107
|
# rubocop:disable Metrics/CyclomaticComplexity
|
92
108
|
def check_branch(node)
|
93
109
|
return unless node
|
@@ -49,13 +49,13 @@ module RuboCop
|
|
49
49
|
# # good
|
50
50
|
# arr.max_by(&:foo)
|
51
51
|
#
|
52
|
-
class
|
52
|
+
class RedundantSort < Cop
|
53
53
|
include RangeHelp
|
54
54
|
|
55
55
|
MSG = 'Use `%<suggestion>s` instead of '\
|
56
56
|
'`%<sorter>s...%<accessor_source>s`.'
|
57
57
|
|
58
|
-
def_node_matcher :
|
58
|
+
def_node_matcher :redundant_sort?, <<~MATCHER
|
59
59
|
{
|
60
60
|
(send $(send _ $:sort ...) ${:last :first})
|
61
61
|
(send $(send _ $:sort ...) ${:[] :at :slice} {(int 0) (int -1)})
|
@@ -72,7 +72,7 @@ module RuboCop
|
|
72
72
|
MATCHER
|
73
73
|
|
74
74
|
def on_send(node)
|
75
|
-
|
75
|
+
redundant_sort?(node) do |sort_node, sorter, accessor|
|
76
76
|
range = range_between(
|
77
77
|
sort_node.loc.selector.begin_pos,
|
78
78
|
node.loc.expression.end_pos
|
@@ -87,7 +87,7 @@ module RuboCop
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def autocorrect(node)
|
90
|
-
sort_node, sorter, accessor =
|
90
|
+
sort_node, sorter, accessor = redundant_sort?(node)
|
91
91
|
|
92
92
|
lambda do |corrector|
|
93
93
|
# Remove accessor, e.g. `first` or `[-1]`.
|
@@ -112,15 +112,14 @@ module RuboCop
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def autocorrect(node)
|
115
|
-
|
116
|
-
|
117
|
-
method_call, = matching_receiver.parent
|
115
|
+
body = node.node_parts[1]
|
116
|
+
method_call = method_call(node)
|
118
117
|
|
119
118
|
lambda do |corrector|
|
120
119
|
corrector.remove(begin_range(node, body))
|
121
120
|
corrector.remove(end_range(node, body))
|
122
121
|
corrector.insert_before(method_call.loc.dot, '&')
|
123
|
-
handle_comments(corrector, method_call)
|
122
|
+
handle_comments(corrector, node, method_call)
|
124
123
|
|
125
124
|
add_safe_nav_to_all_methods_in_chain(corrector, method_call, body)
|
126
125
|
end
|
@@ -128,18 +127,30 @@ module RuboCop
|
|
128
127
|
|
129
128
|
private
|
130
129
|
|
131
|
-
def handle_comments(corrector, method_call)
|
132
|
-
|
130
|
+
def handle_comments(corrector, node, method_call)
|
131
|
+
comments = comments(node)
|
132
|
+
return if comments.empty?
|
133
133
|
|
134
|
-
comments = processed_source.comments.map(&:text).join("\n")
|
135
134
|
corrector.insert_before(method_call.loc.expression,
|
136
|
-
comments
|
135
|
+
"#{comments.map(&:text).join("\n")}\n")
|
136
|
+
end
|
137
|
+
|
138
|
+
def comments(node)
|
139
|
+
processed_source.comments.select do |comment|
|
140
|
+
comment.loc.first_line > node.loc.first_line &&
|
141
|
+
comment.loc.last_line < node.loc.last_line
|
142
|
+
end
|
137
143
|
end
|
138
144
|
|
139
145
|
def allowed_if_condition?(node)
|
140
146
|
node.else? || node.elsif? || node.ternary?
|
141
147
|
end
|
142
148
|
|
149
|
+
def method_call(node)
|
150
|
+
_checked_variable, matching_receiver, = extract_parts(node)
|
151
|
+
matching_receiver.parent
|
152
|
+
end
|
153
|
+
|
143
154
|
def extract_parts(node)
|
144
155
|
case node.type
|
145
156
|
when :if
|
@@ -6,6 +6,9 @@ module RuboCop
|
|
6
6
|
# This cop checks for multiple expressions placed on the same line.
|
7
7
|
# It also checks for lines terminated with a semicolon.
|
8
8
|
#
|
9
|
+
# This cop has `AllowAsExpressionSeparator` configuration option.
|
10
|
+
# It allows `;` to separate several expressions on the same line.
|
11
|
+
#
|
9
12
|
# @example
|
10
13
|
# # bad
|
11
14
|
# foo = 1; bar = 2;
|
@@ -15,6 +18,14 @@ module RuboCop
|
|
15
18
|
# foo = 1
|
16
19
|
# bar = 2
|
17
20
|
# baz = 3
|
21
|
+
#
|
22
|
+
# @example AllowAsExpressionSeparator: false (default)
|
23
|
+
# # bad
|
24
|
+
# foo = 1; bar = 2
|
25
|
+
#
|
26
|
+
# @example AllowAsExpressionSeparator: true
|
27
|
+
# # good
|
28
|
+
# foo = 1; bar = 2
|
18
29
|
class Semicolon < Cop
|
19
30
|
include RangeHelp
|
20
31
|
|
@@ -36,8 +47,8 @@ module RuboCop
|
|
36
47
|
return if exprs.size < 2
|
37
48
|
|
38
49
|
# create a map matching lines to the number of expressions on them
|
39
|
-
exprs_lines = exprs.map
|
40
|
-
lines = exprs_lines.group_by
|
50
|
+
exprs_lines = exprs.map(&:first_line)
|
51
|
+
lines = exprs_lines.group_by(&:itself)
|
41
52
|
|
42
53
|
lines.each do |line, expr_on_line|
|
43
54
|
# Every line with more than one expression on it is a
|
@@ -160,17 +160,15 @@ module RuboCop
|
|
160
160
|
end
|
161
161
|
|
162
162
|
def format_message(english, regular, global)
|
163
|
-
if
|
163
|
+
if regular.empty?
|
164
|
+
format(MSG_ENGLISH, prefer: format_list(english), global: global)
|
165
|
+
elsif english.empty?
|
166
|
+
format(MSG_REGULAR, prefer: format_list(regular), global: global)
|
167
|
+
else
|
164
168
|
format(MSG_BOTH,
|
165
169
|
prefer: format_list(english),
|
166
170
|
regular: format_list(regular),
|
167
171
|
global: global)
|
168
|
-
elsif !regular.empty?
|
169
|
-
format(MSG_REGULAR, prefer: format_list(regular), global: global)
|
170
|
-
elsif !english.empty?
|
171
|
-
format(MSG_ENGLISH, prefer: format_list(english), global: global)
|
172
|
-
else
|
173
|
-
raise 'Bug in SpecialGlobalVars - global var w/o preferred vars!'
|
174
172
|
end
|
175
173
|
end
|
176
174
|
|
data/lib/rubocop/cop/util.rb
CHANGED
@@ -9,7 +9,7 @@ module RuboCop
|
|
9
9
|
# Match literal regex characters, not including anchors, character
|
10
10
|
# classes, alternatives, groups, repetitions, references, etc
|
11
11
|
LITERAL_REGEX =
|
12
|
-
|
12
|
+
%r{[\w\s\-,"'!#%&<>=;:`~/]|\\[^AbBdDgGhHkpPRwWXsSzZ0-9]}.freeze
|
13
13
|
|
14
14
|
module_function
|
15
15
|
|
@@ -44,15 +44,15 @@ module RuboCop
|
|
44
44
|
attr_reader :begin_pos, :end_pos
|
45
45
|
attr_reader :flags, :width, :precision, :name, :type
|
46
46
|
|
47
|
-
def initialize(
|
48
|
-
@source =
|
49
|
-
@begin_pos =
|
50
|
-
@end_pos =
|
51
|
-
@flags =
|
52
|
-
@width =
|
53
|
-
@precision =
|
54
|
-
@name =
|
55
|
-
@type =
|
47
|
+
def initialize(match)
|
48
|
+
@source = match[0]
|
49
|
+
@begin_pos = match.begin(0)
|
50
|
+
@end_pos = match.end(0)
|
51
|
+
@flags = match[:flags].to_s + match[:more_flags].to_s
|
52
|
+
@width = match[:width]
|
53
|
+
@precision = match[:precision]
|
54
|
+
@name = match[:name]
|
55
|
+
@type = match[:type]
|
56
56
|
end
|
57
57
|
|
58
58
|
def percent?
|
@@ -109,16 +109,8 @@ module RuboCop
|
|
109
109
|
|
110
110
|
def parse
|
111
111
|
@source.to_enum(:scan, SEQUENCE).map do
|
112
|
-
match = Regexp.last_match
|
113
112
|
FormatSequence.new(
|
114
|
-
|
115
|
-
begin_pos: match.begin(0),
|
116
|
-
end_pos: match.end(0),
|
117
|
-
flags: match[:flags].to_s + match[:more_flags].to_s,
|
118
|
-
width: match[:width],
|
119
|
-
precision: match[:precision],
|
120
|
-
name: match[:name],
|
121
|
-
type: match[:type]
|
113
|
+
Regexp.last_match
|
122
114
|
)
|
123
115
|
end
|
124
116
|
end
|
@@ -284,11 +284,7 @@ module RuboCop
|
|
284
284
|
def process_scope(node)
|
285
285
|
if TWISTED_SCOPE_TYPES.include?(node.type)
|
286
286
|
# See the comment at the end of file for this behavior.
|
287
|
-
twisted_nodes
|
288
|
-
twisted_nodes << node.children[1] if node.class_type?
|
289
|
-
twisted_nodes.compact!
|
290
|
-
|
291
|
-
twisted_nodes.each do |twisted_node|
|
287
|
+
twisted_nodes(node).each do |twisted_node|
|
292
288
|
process_node(twisted_node)
|
293
289
|
scanned_nodes << twisted_node
|
294
290
|
end
|
@@ -298,6 +294,12 @@ module RuboCop
|
|
298
294
|
skip_children!
|
299
295
|
end
|
300
296
|
|
297
|
+
def twisted_nodes(node)
|
298
|
+
twisted_nodes = [node.children[0]]
|
299
|
+
twisted_nodes << node.children[1] if node.class_type?
|
300
|
+
twisted_nodes.compact
|
301
|
+
end
|
302
|
+
|
301
303
|
def process_send(node)
|
302
304
|
_receiver, method_name, args = *node
|
303
305
|
return unless method_name == :binding
|
@@ -15,9 +15,14 @@ module RuboCop
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def report_offense(file, offense)
|
18
|
-
output.printf(
|
19
|
-
|
20
|
-
|
18
|
+
output.printf(
|
19
|
+
"%<path>s:%<line>d:%<column>d: %<severity>s: %<message>s\n",
|
20
|
+
path: cyan(smart_path(file)),
|
21
|
+
line: offense.line,
|
22
|
+
column: offense.real_column,
|
23
|
+
severity: colored_severity_code(offense),
|
24
|
+
message: message(offense)
|
25
|
+
)
|
21
26
|
|
22
27
|
# rubocop:disable Lint/HandleExceptions
|
23
28
|
begin
|