rubocop 0.86.0 → 0.87.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 +46 -4
- data/lib/rubocop.rb +7 -1
- data/lib/rubocop/cli.rb +0 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +40 -5
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/config_loader.rb +22 -62
- data/lib/rubocop/config_obsoletion.rb +0 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +13 -23
- data/lib/rubocop/cop/base.rb +399 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +48 -50
- data/lib/rubocop/cop/cop.rb +85 -236
- data/lib/rubocop/cop/corrector.rb +38 -115
- 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_type_predicate.rb +11 -14
- data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -8
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +0 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +19 -25
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/interpolation_check.rb +13 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +8 -3
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +27 -23
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +8 -0
- data/lib/rubocop/cop/lint/syntax.rb +11 -26
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +22 -0
- data/lib/rubocop/cop/metrics/class_length.rb +25 -2
- data/lib/rubocop/cop/metrics/method_length.rb +23 -0
- data/lib/rubocop/cop/metrics/module_length.rb +25 -2
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/code_length.rb +4 -0
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -2
- data/lib/rubocop/cop/mixin/too_many_lines.rb +3 -13
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +27 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +136 -0
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +121 -0
- data/lib/rubocop/cop/style/class_vars.rb +21 -0
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +5 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -5
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +4 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +14 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +26 -7
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +1 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +2 -2
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/zero_length_predicate.rb +2 -2
- data/lib/rubocop/cop/team.rb +97 -81
- data/lib/rubocop/cop/utils/format_string.rb +1 -2
- data/lib/rubocop/name_similarity.rb +1 -3
- data/lib/rubocop/options.rb +15 -8
- data/lib/rubocop/rake_task.rb +6 -9
- data/lib/rubocop/rspec/cop_helper.rb +4 -4
- data/lib/rubocop/rspec/expect_offense.rb +10 -16
- data/lib/rubocop/rspec/shared_contexts.rb +7 -7
- data/lib/rubocop/runner.rb +31 -29
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +15 -7
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
@@ -150,14 +150,14 @@ module RuboCop
|
|
150
150
|
def_node_matcher :operation_produces_immutable_object?, <<~PATTERN
|
151
151
|
{
|
152
152
|
(const _ _)
|
153
|
-
(send (const nil? :Struct) :new ...)
|
154
|
-
(block (send (const nil? :Struct) :new ...) ...)
|
153
|
+
(send (const {nil? cbase} :Struct) :new ...)
|
154
|
+
(block (send (const {nil? cbase} :Struct) :new ...) ...)
|
155
155
|
(send _ :freeze)
|
156
156
|
(send {float int} {:+ :- :* :** :/ :% :<<} _)
|
157
157
|
(send _ {:+ :- :* :** :/ :%} {float int})
|
158
158
|
(send _ {:== :=== :!= :<= :>= :< :>} _)
|
159
|
-
(send (const nil? :ENV) :[] _)
|
160
|
-
(or (send (const nil? :ENV) :[] _) _)
|
159
|
+
(send (const {nil? cbase} :ENV) :[] _)
|
160
|
+
(or (send (const {nil? cbase} :ENV) :[] _) _)
|
161
161
|
(send _ {:count :length :size} ...)
|
162
162
|
(block (send _ {:count :length :size} ...) ...)
|
163
163
|
}
|
@@ -14,6 +14,7 @@ module RuboCop
|
|
14
14
|
# method1(method2 arg)
|
15
15
|
class NestedParenthesizedCalls < Cop
|
16
16
|
include RangeHelp
|
17
|
+
include AllowedMethods
|
17
18
|
|
18
19
|
MSG = 'Add parentheses to nested method call `%<source>s`.'
|
19
20
|
|
@@ -54,13 +55,9 @@ module RuboCop
|
|
54
55
|
|
55
56
|
def allowed?(send_node)
|
56
57
|
send_node.parent.arguments.one? &&
|
57
|
-
|
58
|
+
allowed_method?(send_node.method_name) &&
|
58
59
|
send_node.arguments.one?
|
59
60
|
end
|
60
|
-
|
61
|
-
def allowed_methods
|
62
|
-
cop_config['AllowedMethods'] || []
|
63
|
-
end
|
64
61
|
end
|
65
62
|
end
|
66
63
|
end
|
@@ -17,7 +17,7 @@ module RuboCop
|
|
17
17
|
MSG = 'Use `proc` instead of `Proc.new`.'
|
18
18
|
|
19
19
|
def_node_matcher :proc_new?,
|
20
|
-
'(block $(send (const nil? :Proc) :new) ...)'
|
20
|
+
'(block $(send (const {nil? cbase} :Proc) :new) ...)'
|
21
21
|
|
22
22
|
def on_block(node)
|
23
23
|
proc_new?(node) do |block_method|
|
@@ -31,7 +31,7 @@ module RuboCop
|
|
31
31
|
(send
|
32
32
|
int {:+ :-}
|
33
33
|
(send
|
34
|
-
{nil? (const nil? :Random) (const nil? :Kernel)}
|
34
|
+
{nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
|
35
35
|
:rand
|
36
36
|
{int irange erange}))
|
37
37
|
PATTERN
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
39
39
|
def_node_matcher :rand_op_integer?, <<~PATTERN
|
40
40
|
(send
|
41
41
|
(send
|
42
|
-
{nil? (const nil? :Random) (const nil? :Kernel)}
|
42
|
+
{nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
|
43
43
|
:rand
|
44
44
|
{int irange erange})
|
45
45
|
{:+ :-}
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
49
49
|
def_node_matcher :rand_modified?, <<~PATTERN
|
50
50
|
(send
|
51
51
|
(send
|
52
|
-
{nil? (const nil? :Random) (const nil? :Kernel)}
|
52
|
+
{nil? (const {nil? cbase} :Random) (const {nil? cbase} :Kernel)}
|
53
53
|
:rand
|
54
54
|
{int irange erange})
|
55
55
|
{:succ :pred :next})
|
@@ -128,14 +128,8 @@ module RuboCop
|
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
|
-
def_node_matcher :namespace, <<~PATTERN
|
132
|
-
{$nil? (const nil? $_)}
|
133
|
-
PATTERN
|
134
|
-
|
135
131
|
def prefix_from_prefix_node(node)
|
136
|
-
|
137
|
-
[namespace, 'rand'].compact.join('.')
|
138
|
-
end
|
132
|
+
[node&.source, 'rand'].compact.join('.')
|
139
133
|
end
|
140
134
|
|
141
135
|
def boundaries_from_random_node(random_node)
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for redundant assignment before returning.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# def test
|
11
|
+
# x = foo
|
12
|
+
# x
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# # bad
|
16
|
+
# def test
|
17
|
+
# if x
|
18
|
+
# z = foo
|
19
|
+
# z
|
20
|
+
# elsif y
|
21
|
+
# z = bar
|
22
|
+
# z
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# def test
|
28
|
+
# foo
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# # good
|
32
|
+
# def test
|
33
|
+
# if x
|
34
|
+
# foo
|
35
|
+
# elsif y
|
36
|
+
# bar
|
37
|
+
# end
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
class RedundantAssignment < Cop
|
41
|
+
MSG = 'Redundant assignment before returning detected.'
|
42
|
+
|
43
|
+
def_node_matcher :redundant_assignment?, <<~PATTERN
|
44
|
+
(... $(lvasgn _name _expression) (lvar _name))
|
45
|
+
PATTERN
|
46
|
+
|
47
|
+
def on_def(node)
|
48
|
+
check_branch(node.body)
|
49
|
+
end
|
50
|
+
alias on_defs on_def
|
51
|
+
|
52
|
+
def autocorrect(node)
|
53
|
+
lambda do |corrector|
|
54
|
+
expression = node.children[1]
|
55
|
+
corrector.replace(node, expression.source)
|
56
|
+
corrector.remove(right_sibling_of(node))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def check_branch(node)
|
63
|
+
return unless node
|
64
|
+
|
65
|
+
case node.type
|
66
|
+
when :case then check_case_node(node)
|
67
|
+
when :if then check_if_node(node)
|
68
|
+
when :rescue, :resbody
|
69
|
+
check_rescue_node(node)
|
70
|
+
when :ensure then check_ensure_node(node)
|
71
|
+
when :begin, :kwbegin
|
72
|
+
check_begin_node(node)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def check_case_node(node)
|
77
|
+
node.when_branches.each { |when_node| check_branch(when_node.body) }
|
78
|
+
check_branch(node.else_branch)
|
79
|
+
end
|
80
|
+
|
81
|
+
def check_if_node(node)
|
82
|
+
return if node.modifier_form? || node.ternary?
|
83
|
+
|
84
|
+
check_branch(node.if_branch)
|
85
|
+
check_branch(node.else_branch)
|
86
|
+
end
|
87
|
+
|
88
|
+
def check_rescue_node(node)
|
89
|
+
node.child_nodes.each do |child_node|
|
90
|
+
check_branch(child_node)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def check_ensure_node(node)
|
95
|
+
check_branch(node.body)
|
96
|
+
end
|
97
|
+
|
98
|
+
def check_begin_node(node)
|
99
|
+
if (assignment = redundant_assignment?(node))
|
100
|
+
add_offense(assignment)
|
101
|
+
else
|
102
|
+
last_expr = node.children.last
|
103
|
+
check_branch(last_expr)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def right_sibling_of(node)
|
108
|
+
siblings_of(node)[node.sibling_index + 1]
|
109
|
+
end
|
110
|
+
|
111
|
+
def siblings_of(node)
|
112
|
+
node.parent.children
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -16,21 +16,22 @@ module RuboCop
|
|
16
16
|
#
|
17
17
|
# # Good
|
18
18
|
# raise 'message'
|
19
|
-
class RedundantException <
|
19
|
+
class RedundantException < Base
|
20
|
+
extend AutoCorrector
|
21
|
+
|
20
22
|
MSG_1 = 'Redundant `RuntimeError` argument can be removed.'
|
21
23
|
MSG_2 = 'Redundant `RuntimeError.new` call can be replaced with ' \
|
22
24
|
'just the message.'
|
23
25
|
|
26
|
+
# Switch `raise RuntimeError, 'message'` to `raise 'message'`, and
|
27
|
+
# `raise RuntimeError.new('message')` to `raise 'message'`.
|
24
28
|
def on_send(node)
|
25
|
-
|
26
|
-
compact?(node) { add_offense(node, message: MSG_2) }
|
29
|
+
fix_exploded(node) || fix_compact(node)
|
27
30
|
end
|
28
31
|
|
29
|
-
|
30
|
-
# `raise RuntimeError.new('message')` to `raise 'message'`.
|
31
|
-
def autocorrect(node) # rubocop:disable Metrics/MethodLength
|
32
|
+
def fix_exploded(node)
|
32
33
|
exploded?(node) do |command, message|
|
33
|
-
|
34
|
+
add_offense(node, message: MSG_1) do |corrector|
|
34
35
|
if node.parenthesized?
|
35
36
|
corrector.replace(node,
|
36
37
|
"#{command}(#{message.source})")
|
@@ -40,19 +41,22 @@ module RuboCop
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def fix_compact(node)
|
43
47
|
compact?(node) do |new_call, message|
|
44
|
-
|
48
|
+
add_offense(node, message: MSG_2) do |corrector|
|
45
49
|
corrector.replace(new_call, message.source)
|
46
50
|
end
|
47
51
|
end
|
48
52
|
end
|
49
53
|
|
50
54
|
def_node_matcher :exploded?, <<~PATTERN
|
51
|
-
(send nil? ${:raise :fail} (const nil? :RuntimeError) $_)
|
55
|
+
(send nil? ${:raise :fail} (const {nil? cbase} :RuntimeError) $_)
|
52
56
|
PATTERN
|
53
57
|
|
54
58
|
def_node_matcher :compact?, <<~PATTERN
|
55
|
-
(send nil? {:raise :fail} $(send (const nil? :RuntimeError) :new $_))
|
59
|
+
(send nil? {:raise :fail} $(send (const {nil? cbase} :RuntimeError) :new $_))
|
56
60
|
PATTERN
|
57
61
|
end
|
58
62
|
end
|
@@ -41,13 +41,12 @@ module RuboCop
|
|
41
41
|
(block
|
42
42
|
$(send _ :fetch _)
|
43
43
|
(args)
|
44
|
-
${#basic_literal? const_type?})
|
44
|
+
${nil? #basic_literal? #const_type?})
|
45
45
|
PATTERN
|
46
46
|
|
47
47
|
def on_block(node)
|
48
48
|
redundant_fetch_block_candidate?(node) do |send, body|
|
49
|
-
return if
|
50
|
-
return if body.str_type? && !check_for_string?
|
49
|
+
return if should_not_check?(send, body)
|
51
50
|
|
52
51
|
range = fetch_range(send, node)
|
53
52
|
good = build_good_method(send, body)
|
@@ -65,7 +64,9 @@ module RuboCop
|
|
65
64
|
redundant_fetch_block_candidate?(node) do |send, body|
|
66
65
|
lambda do |corrector|
|
67
66
|
receiver, _, key = send.children
|
68
|
-
|
67
|
+
default_value = body ? body.source : 'nil'
|
68
|
+
|
69
|
+
corrector.replace(node, "#{receiver.source}.fetch(#{key.source}, #{default_value})")
|
69
70
|
end
|
70
71
|
end
|
71
72
|
end
|
@@ -73,21 +74,39 @@ module RuboCop
|
|
73
74
|
private
|
74
75
|
|
75
76
|
def basic_literal?(node)
|
76
|
-
node
|
77
|
+
node&.basic_literal?
|
78
|
+
end
|
79
|
+
|
80
|
+
def const_type?(node)
|
81
|
+
node&.const_type?
|
82
|
+
end
|
83
|
+
|
84
|
+
def should_not_check?(send, body)
|
85
|
+
(body&.const_type? && !check_for_constant?) ||
|
86
|
+
(body&.str_type? && !check_for_string?) ||
|
87
|
+
rails_cache?(send.receiver)
|
77
88
|
end
|
78
89
|
|
90
|
+
def_node_matcher :rails_cache?, <<~PATTERN
|
91
|
+
(send (const _ :Rails) :cache)
|
92
|
+
PATTERN
|
93
|
+
|
79
94
|
def fetch_range(send, node)
|
80
95
|
range_between(send.loc.selector.begin_pos, node.loc.end.end_pos)
|
81
96
|
end
|
82
97
|
|
83
98
|
def build_good_method(send, body)
|
84
99
|
key = send.children[2].source
|
85
|
-
|
100
|
+
default_value = body ? body.source : 'nil'
|
101
|
+
|
102
|
+
"fetch(#{key}, #{default_value})"
|
86
103
|
end
|
87
104
|
|
88
105
|
def build_bad_method(send, body)
|
89
106
|
key = send.children[2].source
|
90
|
-
"
|
107
|
+
block = body ? "{ #{body.source} }" : '{}'
|
108
|
+
|
109
|
+
"fetch(#{key}) #{block}"
|
91
110
|
end
|
92
111
|
|
93
112
|
def check_for_constant?
|
@@ -56,7 +56,7 @@ module RuboCop
|
|
56
56
|
(begin (send {float int} {:+ :- :* :** :/ :% :<<} _))
|
57
57
|
(begin (send !(str _) {:+ :- :* :** :/ :%} {float int}))
|
58
58
|
(begin (send _ {:== :=== :!= :<= :>= :< :>} _))
|
59
|
-
(send (const nil? :ENV) :[] _)
|
59
|
+
(send (const {nil? cbase} :ENV) :[] _)
|
60
60
|
(send _ {:count :length :size} ...)
|
61
61
|
(block (send _ {:count :length :size} ...) ...)
|
62
62
|
}
|
@@ -205,7 +205,9 @@ module RuboCop
|
|
205
205
|
end
|
206
206
|
|
207
207
|
def first_argument?(node)
|
208
|
-
first_send_argument?(node) ||
|
208
|
+
first_send_argument?(node) ||
|
209
|
+
first_super_argument?(node) ||
|
210
|
+
first_yield_argument?(node)
|
209
211
|
end
|
210
212
|
|
211
213
|
def_node_matcher :first_send_argument?, <<~PATTERN
|
@@ -216,6 +218,10 @@ module RuboCop
|
|
216
218
|
^(super equal?(%0) ...)
|
217
219
|
PATTERN
|
218
220
|
|
221
|
+
def_node_matcher :first_yield_argument?, <<~PATTERN
|
222
|
+
^(yield equal?(%0) ...)
|
223
|
+
PATTERN
|
224
|
+
|
219
225
|
def call_chain_starts_with_int?(begin_node, send_node)
|
220
226
|
recv = first_part_of_call_chain(send_node)
|
221
227
|
recv&.int_type? && (parent = begin_node.parent) &&
|
@@ -34,10 +34,11 @@ module RuboCop
|
|
34
34
|
\[ # Literal [
|
35
35
|
(?!\#\{) # Not (the start of) an interpolation
|
36
36
|
(?: # Either...
|
37
|
-
|
37
|
+
\\[^b] | # Any escaped character except b (which would change behaviour)
|
38
38
|
[^.*+?{}()|$] | # or one that doesn't require escaping outside the character class
|
39
39
|
\\[upP]\{[^}]+\} # or a unicode code-point or property
|
40
40
|
)
|
41
|
+
(?<!\\) # No \-prefix (i.e. not escaped)
|
41
42
|
\] # Literal ]
|
42
43
|
)
|
43
44
|
/x.freeze
|
@@ -111,7 +111,7 @@ module RuboCop
|
|
111
111
|
RAISE_MSG = 'Use `raise` instead of `fail` to ' \
|
112
112
|
'rethrow exceptions.'
|
113
113
|
|
114
|
-
def_node_matcher :kernel_call?, '(send (const nil? :Kernel) %1 ...)'
|
114
|
+
def_node_matcher :kernel_call?, '(send (const {nil? cbase} :Kernel) %1 ...)'
|
115
115
|
def_node_search :custom_fail_methods,
|
116
116
|
'{(def :fail ...) (defs _ :fail ...)}'
|
117
117
|
|
@@ -41,8 +41,8 @@ module RuboCop
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def_node_matcher :struct_constructor?, <<~PATTERN
|
44
|
-
{(send (const nil? :Struct) :new ...)
|
45
|
-
(block (send (const nil? :Struct) :new ...) ...)}
|
44
|
+
{(send (const {nil? cbase} :Struct) :new ...)
|
45
|
+
(block (send (const {nil? cbase} :Struct) :new ...) ...)}
|
46
46
|
PATTERN
|
47
47
|
|
48
48
|
private
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
'instead of a block.'
|
20
20
|
SUPER_TYPES = %i[super zsuper].freeze
|
21
21
|
|
22
|
-
def_node_matcher :proc_node?, '(send (const nil? :Proc) :new)'
|
22
|
+
def_node_matcher :proc_node?, '(send (const {nil? cbase} :Proc) :new)'
|
23
23
|
def_node_matcher :symbol_proc?, <<~PATTERN
|
24
24
|
(block
|
25
25
|
${(send ...) (super ...) zsuper}
|
@@ -28,6 +28,8 @@ module RuboCop
|
|
28
28
|
# attr_reader :baz
|
29
29
|
# end
|
30
30
|
class TrivialAccessors < Cop
|
31
|
+
include AllowedMethods
|
32
|
+
|
31
33
|
MSG = 'Use `attr_%<kind>s` to define trivial %<kind>s methods.'
|
32
34
|
|
33
35
|
def on_def(node)
|
@@ -95,9 +97,8 @@ module RuboCop
|
|
95
97
|
cop_config['IgnoreClassMethods']
|
96
98
|
end
|
97
99
|
|
98
|
-
def
|
99
|
-
allowed_methods
|
100
|
-
Array(allowed_methods).map(&:to_sym) + [:initialize]
|
100
|
+
def allowed_method_names
|
101
|
+
allowed_methods.map(&:to_sym) + [:initialize]
|
101
102
|
end
|
102
103
|
|
103
104
|
def dsl_writer?(method_name)
|
@@ -106,7 +107,7 @@ module RuboCop
|
|
106
107
|
|
107
108
|
def trivial_reader?(node)
|
108
109
|
looks_like_trivial_reader?(node) &&
|
109
|
-
!
|
110
|
+
!allowed_method_name?(node) && !allowed_reader?(node)
|
110
111
|
end
|
111
112
|
|
112
113
|
def looks_like_trivial_reader?(node)
|
@@ -115,7 +116,7 @@ module RuboCop
|
|
115
116
|
|
116
117
|
def trivial_writer?(node)
|
117
118
|
looks_like_trivial_writer?(node) &&
|
118
|
-
!
|
119
|
+
!allowed_method_name?(node) && !allowed_writer?(node.method_name)
|
119
120
|
end
|
120
121
|
|
121
122
|
def_node_matcher :looks_like_trivial_writer?, <<~PATTERN
|
@@ -123,8 +124,8 @@ module RuboCop
|
|
123
124
|
(defs _ _ (args (arg ...)) (ivasgn _ (lvar _)))}
|
124
125
|
PATTERN
|
125
126
|
|
126
|
-
def
|
127
|
-
|
127
|
+
def allowed_method_name?(node)
|
128
|
+
allowed_method_names.include?(node.method_name) ||
|
128
129
|
exact_name_match? && !names_match?(node)
|
129
130
|
end
|
130
131
|
|