rubocop 0.76.0 → 0.77.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 +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)
|