rubocop 0.90.0 → 0.91.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 +35 -0
- data/lib/rubocop.rb +10 -1
- data/lib/rubocop/cli/command/execute_runner.rb +8 -0
- data/lib/rubocop/config_loader.rb +3 -3
- data/lib/rubocop/config_store.rb +3 -3
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -0
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +6 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +5 -10
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +17 -4
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -3
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -6
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +54 -0
- data/lib/rubocop/cop/lint/debugger.rb +2 -3
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -4
- data/lib/rubocop/cop/lint/duplicate_require.rb +7 -2
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/empty_file.rb +1 -4
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -0
- data/lib/rubocop/cop/lint/float_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- data/lib/rubocop/cop/lint/identity_comparison.rb +49 -0
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
- data/lib/rubocop/cop/lint/multiple_comparison.rb +3 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -0
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -2
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -0
- data/lib/rubocop/cop/lint/rand_one.rb +2 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
- data/lib/rubocop/cop/lint/to_json.rb +16 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +2 -1
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +2 -1
- data/lib/rubocop/cop/lint/useless_method_definition.rb +20 -27
- data/lib/rubocop/cop/lint/useless_times.rb +97 -0
- data/lib/rubocop/cop/mixin/comments_help.rb +3 -9
- data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +9 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -1
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +3 -11
- data/lib/rubocop/cop/style/alias.rb +2 -0
- data/lib/rubocop/cop/style/array_join.rb +1 -0
- data/lib/rubocop/cop/style/attr.rb +1 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -0
- data/lib/rubocop/cop/style/case_equality.rb +3 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +2 -0
- data/lib/rubocop/cop/style/class_check.rb +6 -9
- data/lib/rubocop/cop/style/class_methods_definitions.rb +42 -16
- data/lib/rubocop/cop/style/class_vars.rb +1 -2
- data/lib/rubocop/cop/style/conditional_assignment.rb +49 -60
- data/lib/rubocop/cop/style/dir.rb +1 -0
- data/lib/rubocop/cop/style/double_negation.rb +1 -0
- data/lib/rubocop/cop/style/empty_literal.rb +3 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -3
- data/lib/rubocop/cop/style/even_odd.rb +1 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +2 -0
- data/lib/rubocop/cop/style/format_string.rb +1 -4
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +12 -2
- data/lib/rubocop/cop/style/hash_transform_keys.rb +5 -11
- data/lib/rubocop/cop/style/hash_transform_values.rb +5 -11
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/lambda_call.rb +3 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -0
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +14 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +2 -0
- data/lib/rubocop/cop/style/not.rb +1 -0
- data/lib/rubocop/cop/style/numeric_predicate.rb +1 -3
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +2 -0
- data/lib/rubocop/cop/style/raise_args.rb +2 -0
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -3
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +12 -3
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +1 -7
- data/lib/rubocop/cop/style/safe_navigation.rb +5 -0
- data/lib/rubocop/cop/style/sample.rb +2 -1
- data/lib/rubocop/cop/style/send.rb +2 -3
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
- data/lib/rubocop/cop/style/slicing_with_range.rb +2 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +16 -2
- data/lib/rubocop/cop/style/strip.rb +1 -0
- data/lib/rubocop/cop/style/unpack_first.rb +1 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -5
- data/lib/rubocop/core_ext/string.rb +1 -1
- data/lib/rubocop/ext/regexp_node.rb +4 -4
- data/lib/rubocop/options.rb +19 -1
- data/lib/rubocop/result_cache.rb +30 -13
- data/lib/rubocop/runner.rb +29 -14
- data/lib/rubocop/version.rb +1 -1
- metadata +8 -4
@@ -40,10 +40,12 @@ module RuboCop
|
|
40
40
|
|
41
41
|
MSG = 'Use `%<method>s %<module_name>s` instead of `%<bad_method>s`.'
|
42
42
|
MIXIN_METHODS = %i[include prepend extend].freeze
|
43
|
+
SEND_METHODS = %i[send public_send __send__].freeze
|
44
|
+
RESTRICT_ON_SEND = SEND_METHODS
|
43
45
|
|
44
46
|
def_node_matcher :send_with_mixin_argument?, <<~PATTERN
|
45
47
|
(send
|
46
|
-
(const _ _) {
|
48
|
+
(const _ _) {:#{SEND_METHODS.join(' :')}}
|
47
49
|
({sym str} $#mixin_method?)
|
48
50
|
$(const _ _))
|
49
51
|
PATTERN
|
@@ -24,6 +24,7 @@ module RuboCop
|
|
24
24
|
class StructNewOverride < Base
|
25
25
|
MSG = '`%<member_name>s` member overrides `Struct#%<method_name>s`' \
|
26
26
|
' and it may be unexpected.'
|
27
|
+
RESTRICT_ON_SEND = %i[new].freeze
|
27
28
|
|
28
29
|
STRUCT_METHOD_NAMES = Struct.instance_methods
|
29
30
|
STRUCT_MEMBER_NAME_TYPES = %i[sym str].freeze
|
@@ -9,12 +9,23 @@ module RuboCop
|
|
9
9
|
# for an optional argument, your method should too.
|
10
10
|
#
|
11
11
|
# @example
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
12
|
+
# class Point
|
13
|
+
# attr_reader :x, :y
|
14
|
+
#
|
15
|
+
# # bad, incorrect arity
|
16
|
+
# def to_json
|
17
|
+
# JSON.generate([x, y])
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# # good, preserving args
|
21
|
+
# def to_json(*args)
|
22
|
+
# JSON.generate([x, y], *args)
|
23
|
+
# end
|
15
24
|
#
|
16
|
-
#
|
17
|
-
#
|
25
|
+
# # good, discarding args
|
26
|
+
# def to_json(*_args)
|
27
|
+
# JSON.generate([x, y])
|
28
|
+
# end
|
18
29
|
# end
|
19
30
|
#
|
20
31
|
class ToJSON < Base
|
@@ -130,7 +130,8 @@ module RuboCop
|
|
130
130
|
case node.type
|
131
131
|
when :begin, :kwbegin
|
132
132
|
statements = *node
|
133
|
-
statements.
|
133
|
+
break_statement = statements.find { |statement| break_statement?(statement) }
|
134
|
+
break_statement && !preceded_by_continue_statement?(break_statement)
|
134
135
|
when :if
|
135
136
|
check_if(node)
|
136
137
|
when :case
|
@@ -44,10 +44,12 @@ module RuboCop
|
|
44
44
|
MSG = '`%<uri_method>s` method is obsolete and should not be used. ' \
|
45
45
|
'Instead, use %<replacements>s depending on your specific use ' \
|
46
46
|
'case.'
|
47
|
+
METHOD_NAMES = %i[escape encode unescape decode].freeze
|
48
|
+
RESTRICT_ON_SEND = METHOD_NAMES
|
47
49
|
|
48
50
|
def_node_matcher :uri_escape_unescape?, <<~PATTERN
|
49
51
|
(send
|
50
|
-
(const ${nil? cbase} :URI) ${
|
52
|
+
(const ${nil? cbase} :URI) ${:#{METHOD_NAMES.join(' :')}}
|
51
53
|
...)
|
52
54
|
PATTERN
|
53
55
|
|
@@ -18,9 +18,10 @@ module RuboCop
|
|
18
18
|
|
19
19
|
MSG = '`%<current>s` is obsolete and should not be used. Instead, use `%<preferred>s`.'
|
20
20
|
URI_CONSTANTS = ['URI', '::URI'].freeze
|
21
|
+
RESTRICT_ON_SEND = %i[regexp].freeze
|
21
22
|
|
22
23
|
def on_send(node)
|
23
|
-
return unless node.
|
24
|
+
return unless node.receiver
|
24
25
|
return unless URI_CONSTANTS.include?(node.receiver.source)
|
25
26
|
|
26
27
|
argument = node.first_argument ? "(#{node.first_argument.source})" : ''
|
@@ -12,32 +12,26 @@ module RuboCop
|
|
12
12
|
# @example
|
13
13
|
# # bad
|
14
14
|
# def initialize
|
15
|
+
# super
|
15
16
|
# end
|
16
17
|
#
|
17
18
|
# def method
|
18
19
|
# super
|
19
20
|
# end
|
20
21
|
#
|
21
|
-
# # good
|
22
|
-
# def initialize
|
23
|
-
# initialize_internals
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# def method
|
22
|
+
# # good - with default arguments
|
23
|
+
# def initialize(x = Object.new)
|
27
24
|
# super
|
28
|
-
# do_something_else
|
29
25
|
# end
|
30
26
|
#
|
31
|
-
# @example AllowComments: true (default)
|
32
27
|
# # good
|
33
28
|
# def initialize
|
34
|
-
#
|
29
|
+
# super
|
30
|
+
# initialize_internals
|
35
31
|
# end
|
36
32
|
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
# def initialize
|
40
|
-
# # Comment.
|
33
|
+
# def method(*args)
|
34
|
+
# super(:extra_arg, *args)
|
41
35
|
# end
|
42
36
|
#
|
43
37
|
class UselessMethodDefinition < Base
|
@@ -46,8 +40,8 @@ module RuboCop
|
|
46
40
|
MSG = 'Useless method definition detected.'
|
47
41
|
|
48
42
|
def on_def(node)
|
49
|
-
return
|
50
|
-
|
43
|
+
return if optional_args?(node)
|
44
|
+
return unless delegating?(node.body, node)
|
51
45
|
|
52
46
|
add_offense(node) { |corrector| corrector.remove(node) }
|
53
47
|
end
|
@@ -55,21 +49,20 @@ module RuboCop
|
|
55
49
|
|
56
50
|
private
|
57
51
|
|
58
|
-
def
|
59
|
-
|
60
|
-
return false if cop_config['AllowComments'] && comment_lines?(node)
|
61
|
-
|
62
|
-
true
|
63
|
-
end
|
64
|
-
|
65
|
-
def constructor?(node)
|
66
|
-
node.def_type? && node.method?(:initialize)
|
52
|
+
def optional_args?(node)
|
53
|
+
node.arguments.any? { |arg| arg.optarg_type? || arg.kwoptarg_type? }
|
67
54
|
end
|
68
55
|
|
69
56
|
def delegating?(node, def_node)
|
70
|
-
|
71
|
-
|
72
|
-
|
57
|
+
if node.nil?
|
58
|
+
false
|
59
|
+
elsif node.zsuper_type?
|
60
|
+
true
|
61
|
+
elsif node.super_type?
|
62
|
+
node.arguments.map(&:source) == def_node.arguments.map(&:source)
|
63
|
+
else
|
64
|
+
false
|
65
|
+
end
|
73
66
|
end
|
74
67
|
end
|
75
68
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for uses of `Integer#times` that will never yield
|
7
|
+
# (when the integer <= 0) or that will only ever yield once
|
8
|
+
# (`1.times`).
|
9
|
+
#
|
10
|
+
# This cop is marked as unsafe as `times` returns its receiver, which
|
11
|
+
# is *usually* OK, but might change behavior.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# # bad
|
15
|
+
# -5.times { do_something }
|
16
|
+
# 0.times { do_something }
|
17
|
+
# 1.times { do_something }
|
18
|
+
# 1.times { |i| do_something(i) }
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# do_something
|
22
|
+
# do_something(1)
|
23
|
+
class UselessTimes < Base
|
24
|
+
include RangeHelp
|
25
|
+
extend AutoCorrector
|
26
|
+
|
27
|
+
MSG = 'Useless call to `%<count>i.times` detected.'
|
28
|
+
RESTRICT_ON_SEND = %i[times].freeze
|
29
|
+
|
30
|
+
def_node_matcher :times_call?, <<~PATTERN
|
31
|
+
(send (int $_) :times (block-pass (sym $_))?)
|
32
|
+
PATTERN
|
33
|
+
|
34
|
+
def_node_matcher :block_arg, <<~PATTERN
|
35
|
+
(block _ (args (arg $_)) ...)
|
36
|
+
PATTERN
|
37
|
+
|
38
|
+
def_node_search :block_reassigns_arg?, <<~PATTERN
|
39
|
+
(lvasgn %)
|
40
|
+
PATTERN
|
41
|
+
|
42
|
+
def on_send(node)
|
43
|
+
return unless (count, proc_name = times_call?(node))
|
44
|
+
return if count > 1
|
45
|
+
|
46
|
+
# Get the block node if applicable
|
47
|
+
node = node.block_node if node.block_literal?
|
48
|
+
|
49
|
+
add_offense(node, message: format(MSG, count: count)) do |corrector|
|
50
|
+
next unless own_line?(node)
|
51
|
+
|
52
|
+
if count < 1
|
53
|
+
remove_node(corrector, node)
|
54
|
+
elsif !proc_name.empty?
|
55
|
+
autocorrect_block_pass(corrector, node, proc_name)
|
56
|
+
else
|
57
|
+
autocorrect_block(corrector, node)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def remove_node(corrector, node)
|
65
|
+
corrector.remove(range_by_whole_lines(node.loc.expression, include_final_newline: true))
|
66
|
+
end
|
67
|
+
|
68
|
+
def autocorrect_block_pass(corrector, node, proc_name)
|
69
|
+
corrector.replace(node, proc_name)
|
70
|
+
end
|
71
|
+
|
72
|
+
def autocorrect_block(corrector, node)
|
73
|
+
block_arg = block_arg(node)
|
74
|
+
return if block_reassigns_arg?(node, block_arg)
|
75
|
+
|
76
|
+
source = node.body.source
|
77
|
+
source.gsub!(/\b#{block_arg}\b/, '1') if block_arg
|
78
|
+
|
79
|
+
corrector.replace(node, fix_indentation(source, node.loc.column...node.body.loc.column))
|
80
|
+
end
|
81
|
+
|
82
|
+
def fix_indentation(source, range)
|
83
|
+
# Cleanup indentation in a multiline block
|
84
|
+
source_lines = source.split("\n")
|
85
|
+
source_lines[1..-1].each { |line| line[range] = '' }
|
86
|
+
source_lines.join("\n")
|
87
|
+
end
|
88
|
+
|
89
|
+
def own_line?(node)
|
90
|
+
# If there is anything else on the line other than whitespace,
|
91
|
+
# don't try to autocorrect
|
92
|
+
processed_source.buffer.source_line(node.loc.line)[0...node.loc.column] !~ /\S/
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -7,15 +7,9 @@ module RuboCop
|
|
7
7
|
include VisibilityHelp
|
8
8
|
|
9
9
|
def source_range_with_comment(node)
|
10
|
-
begin_pos
|
11
|
-
|
12
|
-
|
13
|
-
end_node = find_visibility_end(node) || node
|
14
|
-
[begin_pos_with_comment(start_node),
|
15
|
-
end_position_for(end_node) + 1]
|
16
|
-
else
|
17
|
-
[begin_pos_with_comment(node), end_position_for(node)]
|
18
|
-
end
|
10
|
+
begin_pos = begin_pos_with_comment(node)
|
11
|
+
end_pos = end_position_for(node)
|
12
|
+
end_pos += 1 if node.def_type?
|
19
13
|
|
20
14
|
Parser::Source::Range.new(buffer, begin_pos, end_pos)
|
21
15
|
end
|
@@ -8,8 +8,8 @@ module RuboCop
|
|
8
8
|
include ConfigurableFormatting
|
9
9
|
|
10
10
|
FORMATS = {
|
11
|
-
snake_case: /^@{0,2}[\
|
12
|
-
camelCase: /^@{0,2}(?:_|_?[
|
11
|
+
snake_case: /^@{0,2}[\d[[:lower:]]_]+[!?=]?$/,
|
12
|
+
camelCase: /^@{0,2}(?:_|_?[[[:lower:]]][\d[[:lower:]][[:upper:]]]*)[!?=]?$/
|
13
13
|
}.freeze
|
14
14
|
end
|
15
15
|
end
|
@@ -39,6 +39,15 @@ module RuboCop
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
def start_line_range(node)
|
43
|
+
expr = node.source_range
|
44
|
+
buffer = expr.source_buffer
|
45
|
+
source = buffer.source_line(expr.line)
|
46
|
+
range = buffer.line_range(expr.line)
|
47
|
+
|
48
|
+
range_between(range.begin_pos + (source =~ /\S/), range.begin_pos + (source =~ /\s*\z/))
|
49
|
+
end
|
50
|
+
|
42
51
|
def add_offense_for_misalignment(node, align_with)
|
43
52
|
end_loc = node.loc.end
|
44
53
|
msg = format(MSG, end_line: end_loc.line,
|
@@ -4,7 +4,15 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
# Common functionality for Style/HashTransformKeys and
|
6
6
|
# Style/HashTransformValues
|
7
|
-
module HashTransformMethod
|
7
|
+
module HashTransformMethod # rubocop:disable Metrics/ModuleLength
|
8
|
+
extend NodePattern::Macros
|
9
|
+
|
10
|
+
RESTRICT_ON_SEND = %i[[] to_h].freeze
|
11
|
+
|
12
|
+
def_node_matcher :array_receiver?, <<~PATTERN
|
13
|
+
{(array ...) (send _ :each_with_index) (send _ :with_index _ ?) (send _ :zip ...)}
|
14
|
+
PATTERN
|
15
|
+
|
8
16
|
def on_block(node)
|
9
17
|
on_bad_each_with_object(node) do |*match|
|
10
18
|
handle_possible_offense(node, match, 'each_with_object')
|
@@ -33,7 +33,7 @@ module RuboCop
|
|
33
33
|
'called `%<namespace>s`.'
|
34
34
|
MSG_REGEX = '`%<basename>s` should match `%<regex>s`.'
|
35
35
|
|
36
|
-
SNAKE_CASE = /^[\
|
36
|
+
SNAKE_CASE = /^[\d[[:lower:]]_.?!]+$/.freeze
|
37
37
|
|
38
38
|
def on_new_investigation
|
39
39
|
file_path = processed_source.file_path
|
@@ -65,8 +65,6 @@ module RuboCop
|
|
65
65
|
class AccessModifierDeclarations < Base
|
66
66
|
include ConfigurableEnforcedStyle
|
67
67
|
|
68
|
-
ACCESS_MODIFIERS = %i[private protected public module_function].to_set.freeze
|
69
|
-
|
70
68
|
GROUP_STYLE_MESSAGE = [
|
71
69
|
'`%<access_modifier>s` should not be',
|
72
70
|
'inlined in method definitions.'
|
@@ -77,12 +75,14 @@ module RuboCop
|
|
77
75
|
'inlined in method definitions.'
|
78
76
|
].join(' ')
|
79
77
|
|
78
|
+
RESTRICT_ON_SEND = %i[private protected public module_function].freeze
|
79
|
+
|
80
80
|
def_node_matcher :access_modifier_with_symbol?, <<~PATTERN
|
81
81
|
(send nil? {:private :protected :public} (sym _))
|
82
82
|
PATTERN
|
83
83
|
|
84
84
|
def on_send(node)
|
85
|
-
return unless access_modifier?
|
85
|
+
return unless node.access_modifier?
|
86
86
|
return if node.parent.pair_type?
|
87
87
|
return if cop_config['AllowModifiersOnSymbols'] && access_modifier_with_symbol?(node)
|
88
88
|
|
@@ -95,14 +95,6 @@ module RuboCop
|
|
95
95
|
|
96
96
|
private
|
97
97
|
|
98
|
-
def access_modifier?(node)
|
99
|
-
maybe_access_modifier?(node) && node.access_modifier?
|
100
|
-
end
|
101
|
-
|
102
|
-
def maybe_access_modifier?(node)
|
103
|
-
!node.receiver && ACCESS_MODIFIERS.include?(node.method_name)
|
104
|
-
end
|
105
|
-
|
106
98
|
def offense?(node)
|
107
99
|
(group_style? && access_modifier_is_inlined?(node)) ||
|
108
100
|
(inline_style? && access_modifier_is_not_inlined?(node))
|