rubocop 0.76.0 → 0.77.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 +2 -2
- data/config/default.yml +252 -239
- data/lib/rubocop.rb +27 -20
- data/lib/rubocop/ast/node.rb +1 -1
- data/lib/rubocop/ast/node/block_node.rb +2 -0
- data/lib/rubocop/cli.rb +11 -230
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -0
- data/lib/rubocop/cli/command/base.rb +33 -0
- data/lib/rubocop/cli/command/execute_runner.rb +76 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
- data/lib/rubocop/cli/command/show_cops.rb +73 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/config_obsoletion.rb +62 -9
- data/lib/rubocop/config_validator.rb +1 -3
- data/lib/rubocop/cop/bundler/gem_comment.rb +4 -4
- data/lib/rubocop/cop/cop.rb +19 -0
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -2
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
- data/lib/rubocop/cop/layout/{align_arguments.rb → argument_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/{align_array.rb → array_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/{indent_assignment.rb → assignment_indentation.rb} +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/{indent_first_argument.rb → first_argument_indentation.rb} +3 -3
- data/lib/rubocop/cop/layout/{indent_first_array_element.rb → first_array_element_indentation.rb} +4 -4
- data/lib/rubocop/cop/layout/{indent_first_hash_element.rb → first_hash_element_indentation.rb} +3 -3
- data/lib/rubocop/cop/layout/{indent_first_parameter.rb → first_parameter_indentation.rb} +3 -3
- data/lib/rubocop/cop/layout/{align_hash.rb → hash_alignment.rb} +2 -2
- data/lib/rubocop/cop/layout/{indent_heredoc.rb → heredoc_indentation.rb} +1 -1
- data/lib/rubocop/cop/layout/{leading_blank_lines.rb → leading_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/{align_parameters.rb → parameter_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +12 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/{trailing_blank_lines.rb → trailing_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
- data/lib/rubocop/cop/lint/{duplicated_key.rb → duplicate_hash_key.rb} +1 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/{multiple_compare.rb → multiple_comparison.rb} +1 -1
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/{string_conversion_in_interpolation.rb → redundant_string_coercion.rb} +1 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -2
- data/lib/rubocop/cop/lint/{handle_exceptions.rb → suppressed_exception.rb} +1 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +57 -23
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/metrics/line_length.rb +41 -38
- data/lib/rubocop/cop/metrics/method_length.rb +1 -1
- data/lib/rubocop/cop/mixin/{hash_alignment.rb → hash_alignment_styles.rb} +1 -1
- data/lib/rubocop/cop/mixin/nil_methods.rb +4 -4
- data/lib/rubocop/cop/naming/{uncommunicative_block_param_name.rb → block_parameter_name.rb} +3 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +5 -5
- data/lib/rubocop/cop/naming/{uncommunicative_method_param_name.rb → method_parameter_name.rb} +3 -3
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -6
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/ip_addresses.rb +4 -4
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -5
- data/lib/rubocop/cop/style/next.rb +5 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +7 -3
- data/lib/rubocop/cop/style/option_hash.rb +3 -3
- data/lib/rubocop/cop/style/redundant_parentheses.rb +3 -3
- data/lib/rubocop/cop/style/redundant_return.rb +2 -8
- data/lib/rubocop/cop/style/redundant_sort.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +5 -5
- data/lib/rubocop/cop/team.rb +5 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -3
- data/lib/rubocop/formatter/tap_formatter.rb +1 -3
- data/lib/rubocop/processed_source.rb +1 -1
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/result_cache.rb +21 -7
- data/lib/rubocop/runner.rb +13 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +30 -22
- data/lib/rubocop/cop/mixin/safe_mode.rb +0 -24
@@ -50,7 +50,7 @@ module RuboCop
|
|
50
50
|
def autocorrect(node)
|
51
51
|
lambda do |corrector|
|
52
52
|
redundant_with_index?(node) do |send|
|
53
|
-
if send.
|
53
|
+
if send.method?(:each_with_index)
|
54
54
|
corrector.replace(send.loc.selector, 'each')
|
55
55
|
else
|
56
56
|
corrector.remove(with_index_range(send))
|
@@ -63,7 +63,7 @@ module RuboCop
|
|
63
63
|
private
|
64
64
|
|
65
65
|
def message(node)
|
66
|
-
if node.
|
66
|
+
if node.method?(:each_with_index)
|
67
67
|
MSG_EACH_WITH_INDEX
|
68
68
|
else
|
69
69
|
MSG_WITH_INDEX
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
def autocorrect(node)
|
52
52
|
lambda do |corrector|
|
53
53
|
redundant_with_object?(node) do |send|
|
54
|
-
if send.
|
54
|
+
if send.method?(:each_with_object)
|
55
55
|
corrector.replace(with_object_range(send), 'each')
|
56
56
|
else
|
57
57
|
corrector.remove(with_object_range(send))
|
@@ -64,7 +64,7 @@ module RuboCop
|
|
64
64
|
private
|
65
65
|
|
66
66
|
def message(node)
|
67
|
-
if node.
|
67
|
+
if node.method?(:each_with_object)
|
68
68
|
MSG_EACH_WITH_OBJECT
|
69
69
|
else
|
70
70
|
MSG_WITH_OBJECT
|
@@ -9,23 +9,64 @@ module RuboCop
|
|
9
9
|
# always being defined, and thus access modifiers guarding such methods
|
10
10
|
# are not redundant.
|
11
11
|
#
|
12
|
-
#
|
12
|
+
# This cop has `ContextCreatingMethods` option. The default setting value
|
13
|
+
# is an empty array that means no method is specified.
|
14
|
+
# This setting is an array of methods which, when called, are known to
|
15
|
+
# create its own context in the module's current access context.
|
16
|
+
#
|
17
|
+
# It also has `MethodCreatingMethods` option. The default setting value
|
18
|
+
# is an empty array that means no method is specified.
|
19
|
+
# This setting is an array of methods which, when called, are known to
|
20
|
+
# create other methods in the module's current access context.
|
13
21
|
#
|
22
|
+
# @example
|
23
|
+
# # bad
|
14
24
|
# class Foo
|
15
25
|
# public # this is redundant (default access is public)
|
16
26
|
#
|
17
27
|
# def method
|
18
28
|
# end
|
29
|
+
# end
|
19
30
|
#
|
20
|
-
#
|
21
|
-
#
|
31
|
+
# # bad
|
32
|
+
# class Foo
|
33
|
+
# # The following is redundant (methods defined on the class'
|
34
|
+
# # singleton class are not affected by the public modifier)
|
35
|
+
# public
|
36
|
+
#
|
37
|
+
# def self.method3
|
22
38
|
# end
|
39
|
+
# end
|
23
40
|
#
|
41
|
+
# # bad
|
42
|
+
# class Foo
|
43
|
+
# protected
|
44
|
+
#
|
45
|
+
# define_method(:method2) do
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# protected # this is redundant (repeated from previous modifier)
|
49
|
+
#
|
50
|
+
# [1,2,3].each do |i|
|
51
|
+
# define_method("foo#{i}") do
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# # bad
|
57
|
+
# class Foo
|
24
58
|
# private # this is redundant (no following methods are defined)
|
25
59
|
# end
|
26
60
|
#
|
27
|
-
#
|
61
|
+
# # good
|
62
|
+
# class Foo
|
63
|
+
# private # this is not redundant (a method is defined)
|
64
|
+
#
|
65
|
+
# def method2
|
66
|
+
# end
|
67
|
+
# end
|
28
68
|
#
|
69
|
+
# # good
|
29
70
|
# class Foo
|
30
71
|
# # The following is not redundant (conditionally defined methods are
|
31
72
|
# # considered as always defining a method)
|
@@ -35,31 +76,22 @@ module RuboCop
|
|
35
76
|
# def method
|
36
77
|
# end
|
37
78
|
# end
|
79
|
+
# end
|
38
80
|
#
|
39
|
-
#
|
81
|
+
# # good
|
82
|
+
# class Foo
|
83
|
+
# protected # this is not redundant (a method is defined)
|
40
84
|
#
|
41
85
|
# define_method(:method2) do
|
42
86
|
# end
|
43
|
-
#
|
44
|
-
# protected # this is redundant (repeated from previous modifier)
|
45
|
-
#
|
46
|
-
# [1,2,3].each do |i|
|
47
|
-
# define_method("foo#{i}") do
|
48
|
-
# end
|
49
|
-
# end
|
50
|
-
#
|
51
|
-
# # The following is redundant (methods defined on the class'
|
52
|
-
# # singleton class are not affected by the public modifier)
|
53
|
-
# public
|
54
|
-
#
|
55
|
-
# def self.method3
|
56
|
-
# end
|
57
87
|
# end
|
58
88
|
#
|
59
|
-
# @example
|
89
|
+
# @example ContextCreatingMethods: concerning
|
60
90
|
# # Lint/UselessAccessModifier:
|
61
91
|
# # ContextCreatingMethods:
|
62
92
|
# # - concerning
|
93
|
+
#
|
94
|
+
# # good
|
63
95
|
# require 'active_support/concern'
|
64
96
|
# class Foo
|
65
97
|
# concerning :Bar do
|
@@ -79,10 +111,12 @@ module RuboCop
|
|
79
111
|
# end
|
80
112
|
# end
|
81
113
|
#
|
82
|
-
# @example
|
114
|
+
# @example MethodCreatingMethods: delegate
|
83
115
|
# # Lint/UselessAccessModifier:
|
84
116
|
# # MethodCreatingMethods:
|
85
117
|
# # - delegate
|
118
|
+
#
|
119
|
+
# # good
|
86
120
|
# require 'active_support/core_ext/module/delegation'
|
87
121
|
# class Foo
|
88
122
|
# # this is not redundant because `delegate` creates methods
|
@@ -141,7 +175,7 @@ module RuboCop
|
|
141
175
|
|
142
176
|
def access_modifier?(node)
|
143
177
|
node.bare_access_modifier? ||
|
144
|
-
node.
|
178
|
+
node.method?(:private_class_method)
|
145
179
|
end
|
146
180
|
|
147
181
|
def check_scope(node)
|
@@ -169,7 +203,7 @@ module RuboCop
|
|
169
203
|
def check_send_node(node, cur_vis, unused)
|
170
204
|
if node.bare_access_modifier?
|
171
205
|
check_new_visibility(node, unused, node.method_name, cur_vis)
|
172
|
-
elsif node.
|
206
|
+
elsif node.method?(:private_class_method) && !node.arguments?
|
173
207
|
add_offense(node, message: format(MSG, current: node.method_name))
|
174
208
|
[cur_vis, unused]
|
175
209
|
end
|
@@ -21,14 +21,14 @@ module RuboCop
|
|
21
21
|
# If autocorrection is enabled, the following Layout cops
|
22
22
|
# are recommended to further format the broken lines.
|
23
23
|
#
|
24
|
-
# -
|
25
|
-
# -
|
26
|
-
# - AlignParameters
|
24
|
+
# - ParameterAlignment
|
25
|
+
# - ArgumentAlignment
|
27
26
|
# - ClosingParenthesisIndentation
|
28
|
-
# -
|
29
|
-
# -
|
30
|
-
# -
|
31
|
-
# -
|
27
|
+
# - FirstArgumentIndentation
|
28
|
+
# - FirstArrayElementIndentation
|
29
|
+
# - FirstHashElementIndentation
|
30
|
+
# - FirstParameterIndentation
|
31
|
+
# - HashAlignment
|
32
32
|
# - MultilineArrayLineBreaks
|
33
33
|
# - MultilineHashBraceLayout
|
34
34
|
# - MultilineHashKeyLineBreaks
|
@@ -68,6 +68,10 @@ module RuboCop
|
|
68
68
|
alias on_hash on_potential_breakable_node
|
69
69
|
alias on_send on_potential_breakable_node
|
70
70
|
|
71
|
+
def investigate(processed_source)
|
72
|
+
check_for_breakable_semicolons(processed_source)
|
73
|
+
end
|
74
|
+
|
71
75
|
def investigate_post_walk(processed_source)
|
72
76
|
processed_source.lines.each_with_index do |line, line_index|
|
73
77
|
check_line(line, line_index)
|
@@ -89,11 +93,37 @@ module RuboCop
|
|
89
93
|
return if breakable_node.nil?
|
90
94
|
|
91
95
|
line_index = breakable_node.first_line - 1
|
92
|
-
|
96
|
+
range = breakable_node.source_range
|
97
|
+
|
98
|
+
existing = breakable_range_by_line_index[line_index]
|
99
|
+
return if existing
|
100
|
+
|
101
|
+
breakable_range_by_line_index[line_index] = range
|
102
|
+
end
|
103
|
+
|
104
|
+
def check_for_breakable_semicolons(processed_source)
|
105
|
+
tokens = processed_source.tokens.select { |t| t.type == :tSEMI }
|
106
|
+
tokens.reverse_each do |token|
|
107
|
+
range = breakable_range_after_semicolon(token)
|
108
|
+
breakable_range_by_line_index[range.line - 1] = range if range
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def breakable_range_after_semicolon(semicolon_token)
|
113
|
+
range = semicolon_token.pos
|
114
|
+
end_pos = range.end_pos
|
115
|
+
next_range = range_between(end_pos, end_pos + 1)
|
116
|
+
return nil unless next_range.line == range.line
|
117
|
+
|
118
|
+
next_char = next_range.source
|
119
|
+
return nil if /[\r\n]/ =~ next_char
|
120
|
+
return nil if next_char == ';'
|
121
|
+
|
122
|
+
next_range
|
93
123
|
end
|
94
124
|
|
95
|
-
def
|
96
|
-
@
|
125
|
+
def breakable_range_by_line_index
|
126
|
+
@breakable_range_by_line_index ||= {}
|
97
127
|
end
|
98
128
|
|
99
129
|
def heredocs
|
@@ -147,33 +177,12 @@ module RuboCop
|
|
147
177
|
def register_offense(loc, line, line_index)
|
148
178
|
message = format(MSG, length: line_length(line), max: max)
|
149
179
|
|
150
|
-
breakable_range =
|
180
|
+
breakable_range = breakable_range_by_line_index[line_index]
|
151
181
|
add_offense(breakable_range, location: loc, message: message) do
|
152
182
|
self.max = line_length(line)
|
153
183
|
end
|
154
184
|
end
|
155
185
|
|
156
|
-
def breakable_range(line, line_index)
|
157
|
-
return if line_in_heredoc?(line_index + 1)
|
158
|
-
|
159
|
-
semicolon_range = breakable_semicolon_range(line, line_index)
|
160
|
-
return semicolon_range if semicolon_range
|
161
|
-
|
162
|
-
breakable_node = breakable_nodes_by_line_index[line_index]
|
163
|
-
return breakable_node.source_range if breakable_node
|
164
|
-
end
|
165
|
-
|
166
|
-
def breakable_semicolon_range(line, line_index)
|
167
|
-
semicolon_separated_parts = line.split(';')
|
168
|
-
return if semicolon_separated_parts.length <= 1
|
169
|
-
|
170
|
-
column = semicolon_separated_parts.first.length + 1
|
171
|
-
range = source_range(processed_source.buffer, line_index, column, 1)
|
172
|
-
return if processed_source.commented?(range)
|
173
|
-
|
174
|
-
range
|
175
|
-
end
|
176
|
-
|
177
186
|
def excess_range(uri_range, line, line_index)
|
178
187
|
excessive_position = if uri_range && uri_range.begin < max
|
179
188
|
uri_range.end
|
@@ -216,12 +225,6 @@ module RuboCop
|
|
216
225
|
end
|
217
226
|
end
|
218
227
|
|
219
|
-
def line_in_heredoc?(line_number)
|
220
|
-
heredocs.any? do |range, _delimiter|
|
221
|
-
range.cover?(line_number)
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
228
|
def allow_uri?
|
226
229
|
cop_config['AllowURI']
|
227
230
|
end
|
@@ -5,20 +5,20 @@ module RuboCop
|
|
5
5
|
# This module provides a list of methods that are:
|
6
6
|
# 1. In the NilClass by default
|
7
7
|
# 2. Added to NilClass by explicitly requiring any standard libraries
|
8
|
-
# 3. Cop's configuration parameter
|
8
|
+
# 3. Cop's configuration parameter AllowedMethods.
|
9
9
|
module NilMethods
|
10
10
|
private
|
11
11
|
|
12
12
|
def nil_methods
|
13
|
-
nil.methods + other_stdlib_methods +
|
13
|
+
nil.methods + other_stdlib_methods + allowed_methods
|
14
14
|
end
|
15
15
|
|
16
16
|
def other_stdlib_methods
|
17
17
|
[:to_d]
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
cop_config['
|
20
|
+
def allowed_methods
|
21
|
+
cop_config['AllowedMethods'].map(&:to_sym)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -11,9 +11,9 @@ module RuboCop
|
|
11
11
|
# The `AllowNamesEndingInNumbers` config option takes a boolean. When
|
12
12
|
# set to false, this cop will register offenses for names ending with
|
13
13
|
# numbers. Its default is false. The `AllowedNames` config option
|
14
|
-
# takes an array of
|
14
|
+
# takes an array of permitted names that will never register an
|
15
15
|
# offense. The `ForbiddenNames` config option takes an array of
|
16
|
-
#
|
16
|
+
# restricted names that will always register an offense.
|
17
17
|
#
|
18
18
|
# @example
|
19
19
|
# # bad
|
@@ -35,7 +35,7 @@ module RuboCop
|
|
35
35
|
# foo { |speed, distance| speed * distance }
|
36
36
|
#
|
37
37
|
# baz { |age, height, gender| do_stuff(age, height, gender) }
|
38
|
-
class
|
38
|
+
class BlockParameterName < Cop
|
39
39
|
include UncommunicativeName
|
40
40
|
|
41
41
|
def on_block(node)
|
@@ -5,7 +5,7 @@ module RuboCop
|
|
5
5
|
module Naming
|
6
6
|
# This cop checks that your heredocs are using meaningful delimiters.
|
7
7
|
# By default it disallows `END` and `EO*`, and can be configured through
|
8
|
-
#
|
8
|
+
# forbidden listing additional delimiters.
|
9
9
|
#
|
10
10
|
# @example
|
11
11
|
#
|
@@ -41,13 +41,13 @@ module RuboCop
|
|
41
41
|
|
42
42
|
return false unless delimiters =~ /\w/
|
43
43
|
|
44
|
-
|
45
|
-
delimiters =~ Regexp.new(
|
44
|
+
forbidden_delimiters.none? do |forbidden_delimiter|
|
45
|
+
delimiters =~ Regexp.new(forbidden_delimiter)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
cop_config['
|
49
|
+
def forbidden_delimiters
|
50
|
+
cop_config['ForbiddenDelimiters'] || []
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
data/lib/rubocop/cop/naming/{uncommunicative_method_param_name.rb → method_parameter_name.rb}
RENAMED
@@ -11,9 +11,9 @@ module RuboCop
|
|
11
11
|
# The `AllowNamesEndingInNumbers` config option takes a boolean. When
|
12
12
|
# set to false, this cop will register offenses for names ending with
|
13
13
|
# numbers. Its default is false. The `AllowedNames` config option
|
14
|
-
# takes an array of
|
14
|
+
# takes an array of permitted names that will never register an
|
15
15
|
# offense. The `ForbiddenNames` config option takes an array of
|
16
|
-
#
|
16
|
+
# restricted names that will always register an offense.
|
17
17
|
#
|
18
18
|
# @example
|
19
19
|
# # bad
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
43
43
|
# def baz(age_a, height_b, gender_c)
|
44
44
|
# do_stuff(age_a, height_b, gender_c)
|
45
45
|
# end
|
46
|
-
class
|
46
|
+
class MethodParameterName < Cop
|
47
47
|
include UncommunicativeName
|
48
48
|
|
49
49
|
def on_def(node)
|
@@ -70,11 +70,11 @@ module RuboCop
|
|
70
70
|
!method_name.match(/^#{prefix}[^0-9]/) ||
|
71
71
|
method_name == expected_name(method_name, prefix) ||
|
72
72
|
method_name.end_with?('=') ||
|
73
|
-
|
73
|
+
allowed_methods.include?(method_name)
|
74
74
|
end
|
75
75
|
|
76
76
|
def expected_name(method_name, prefix)
|
77
|
-
new_name = if
|
77
|
+
new_name = if forbidden_prefixes.include?(prefix)
|
78
78
|
method_name.sub(prefix, '')
|
79
79
|
else
|
80
80
|
method_name.dup
|
@@ -87,16 +87,16 @@ module RuboCop
|
|
87
87
|
"Rename `#{method_name}` to `#{new_name}`."
|
88
88
|
end
|
89
89
|
|
90
|
-
def
|
91
|
-
cop_config['
|
90
|
+
def forbidden_prefixes
|
91
|
+
cop_config['ForbiddenPrefixes']
|
92
92
|
end
|
93
93
|
|
94
94
|
def predicate_prefixes
|
95
95
|
cop_config['NamePrefix']
|
96
96
|
end
|
97
97
|
|
98
|
-
def
|
99
|
-
cop_config['
|
98
|
+
def allowed_methods
|
99
|
+
cop_config['AllowedMethods']
|
100
100
|
end
|
101
101
|
|
102
102
|
def method_definition_macros(macro_name)
|