rubocop 0.90.0 → 0.93.1
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 +79 -3
- data/lib/rubocop.rb +20 -5
- data/lib/rubocop/cached_data.rb +2 -1
- data/lib/rubocop/cli/command/execute_runner.rb +8 -0
- data/lib/rubocop/comment_config.rb +9 -5
- data/lib/rubocop/config_loader.rb +3 -3
- data/lib/rubocop/config_regeneration.rb +33 -0
- 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/correctors/line_break_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +10 -10
- 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/array_alignment.rb +1 -0
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/class_structure.rb +1 -1
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +6 -9
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +4 -12
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +13 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -2
- data/lib/rubocop/cop/layout/end_alignment.rb +5 -10
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +26 -4
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +4 -13
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +7 -7
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +0 -4
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +6 -21
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +3 -8
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +2 -2
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +2 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +18 -1
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
- data/lib/rubocop/cop/lint/boolean_symbol.rb +3 -0
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -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/duplicate_rescue_exception.rb +2 -4
- 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/hash_compare_by_identity.rb +37 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -0
- 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/parentheses_as_grouped_expression.rb +1 -1
- 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_cop_disable_directive.rb +22 -12
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +78 -0
- data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
- 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 +3 -6
- 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_access_modifier.rb +3 -9
- data/lib/rubocop/cop/lint/useless_method_definition.rb +20 -27
- data/lib/rubocop/cop/lint/useless_times.rb +106 -0
- data/lib/rubocop/cop/metrics/block_length.rb +3 -1
- data/lib/rubocop/cop/metrics/class_length.rb +14 -6
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +25 -16
- 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/configurable_numbering.rb +3 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +9 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +10 -2
- data/lib/rubocop/cop/mixin/rescue_node.rb +1 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -3
- data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
- 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/offense.rb +15 -2
- 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 +7 -11
- data/lib/rubocop/cop/style/accessor_grouping.rb +3 -0
- data/lib/rubocop/cop/style/alias.rb +2 -0
- data/lib/rubocop/cop/style/array_coercion.rb +4 -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/case_like_if.rb +20 -4
- 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_equality_comparison.rb +64 -0
- 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/combinable_loops.rb +13 -11
- data/lib/rubocop/cop/style/comment_annotation.rb +6 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -8
- data/lib/rubocop/cop/style/conditional_assignment.rb +49 -60
- data/lib/rubocop/cop/style/date_time.rb +12 -1
- 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 +7 -3
- data/lib/rubocop/cop/style/float_division.rb +2 -0
- data/lib/rubocop/cop/style/for.rb +0 -4
- data/lib/rubocop/cop/style/format_string.rb +1 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -1
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +24 -5
- 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/if_unless_modifier.rb +0 -4
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -6
- data/lib/rubocop/cop/style/lambda_call.rb +3 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +0 -4
- data/lib/rubocop/cop/style/mixin_usage.rb +8 -27
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +14 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +1 -0
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -0
- 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/one_line_conditional.rb +3 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +12 -1
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +2 -0
- data/lib/rubocop/cop/style/raise_args.rb +2 -3
- data/lib/rubocop/cop/style/random_with_offset.rb +4 -3
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -9
- data/lib/rubocop/cop/style/redundant_begin.rb +36 -8
- data/lib/rubocop/cop/style/redundant_condition.rb +5 -1
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
- 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_interpolation.rb +6 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +14 -6
- data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +39 -24
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -15
- data/lib/rubocop/cop/style/redundant_return.rb +17 -17
- data/lib/rubocop/cop/style/redundant_self.rb +7 -9
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +12 -29
- data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
- 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 +17 -3
- data/lib/rubocop/cop/style/strip.rb +1 -0
- data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -3
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +4 -3
- data/lib/rubocop/cop/style/unpack_first.rb +1 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -5
- data/lib/rubocop/cop/util.rb +0 -1
- data/lib/rubocop/cop/variable_force/branch.rb +0 -4
- data/lib/rubocop/core_ext/string.rb +1 -1
- data/lib/rubocop/directive_comment.rb +32 -0
- data/lib/rubocop/ext/regexp_node.rb +23 -7
- data/lib/rubocop/formatter/disabled_config_formatter.rb +12 -5
- data/lib/rubocop/options.rb +37 -17
- data/lib/rubocop/result_cache.rb +38 -15
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +5 -5
- data/lib/rubocop/runner.rb +37 -18
- data/lib/rubocop/target_finder.rb +27 -26
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +6 -1
- metadata +19 -18
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +0 -43
- data/lib/rubocop/cop/tokens_util.rb +0 -84
@@ -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
|
@@ -8,9 +8,9 @@ module RuboCop
|
|
8
8
|
include ConfigurableFormatting
|
9
9
|
|
10
10
|
FORMATS = {
|
11
|
-
snake_case: /(?:[
|
12
|
-
normalcase: /(?:_\D*|[
|
13
|
-
non_integer: /[
|
11
|
+
snake_case: /(?:[[[:lower:]]_]|_\d+)$/,
|
12
|
+
normalcase: /(?:_\D*|[[[:upper:]][[:lower:]]]\d*)$/,
|
13
|
+
non_integer: /[[[:upper:]][[:lower:]]_]$/
|
14
14
|
}.freeze
|
15
15
|
end
|
16
16
|
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')
|
@@ -129,7 +137,7 @@ module RuboCop
|
|
129
137
|
end
|
130
138
|
|
131
139
|
# Internal helper class to hold autocorrect data
|
132
|
-
Autocorrection = Struct.new(:match, :block_node, :leading, :trailing) do
|
140
|
+
Autocorrection = Struct.new(:match, :block_node, :leading, :trailing) do
|
133
141
|
def self.from_each_with_object(node, match)
|
134
142
|
new(match, node, 0, 0)
|
135
143
|
end
|
@@ -57,10 +57,11 @@ module RuboCop
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def first_line_comment(node)
|
60
|
-
comment =
|
61
|
-
|
60
|
+
comment = processed_source.find_comment { |c| c.loc.line == node.loc.line }
|
61
|
+
return unless comment
|
62
62
|
|
63
|
-
|
63
|
+
comment_source = comment.loc.expression.source
|
64
|
+
comment_source unless comment_disables_cop?(comment_source)
|
64
65
|
end
|
65
66
|
|
66
67
|
def parenthesize?(node)
|
@@ -80,6 +81,11 @@ module RuboCop
|
|
80
81
|
|
81
82
|
config.for_cop('Layout/LineLength')['Max']
|
82
83
|
end
|
84
|
+
|
85
|
+
def comment_disables_cop?(comment)
|
86
|
+
regexp_pattern = "# rubocop : (disable|todo) ([^,],)* (all|#{cop_name})"
|
87
|
+
Regexp.new(regexp_pattern.gsub(' ', '\s*')).match?(comment)
|
88
|
+
end
|
83
89
|
end
|
84
90
|
end
|
85
91
|
end
|
@@ -16,32 +16,20 @@ module RuboCop
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def find_visibility_start(node)
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
node.left_siblings
|
20
|
+
.reverse
|
21
|
+
.find(&method(:visibility_block?))
|
22
22
|
end
|
23
23
|
|
24
24
|
# Navigate to find the last protected method
|
25
25
|
def find_visibility_end(node)
|
26
26
|
possible_visibilities = VISIBILITY_SCOPES - [node_visibility(node)]
|
27
|
-
right =
|
27
|
+
right = node.right_siblings
|
28
28
|
right.find do |child_node|
|
29
29
|
possible_visibilities.include?(node_visibility(child_node))
|
30
30
|
end || right.last
|
31
31
|
end
|
32
32
|
|
33
|
-
def left_siblings_of(node)
|
34
|
-
siblings_of(node)[0, node.sibling_index]
|
35
|
-
end
|
36
|
-
|
37
|
-
def right_siblings_of(node)
|
38
|
-
siblings_of(node)[node.sibling_index..-1]
|
39
|
-
end
|
40
|
-
|
41
|
-
def siblings_of(node)
|
42
|
-
node.parent.children
|
43
|
-
end
|
44
|
-
|
45
33
|
def_node_matcher :visibility_block?, <<~PATTERN
|
46
34
|
(send nil? { :private :protected :public })
|
47
35
|
PATTERN
|
@@ -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
|
data/lib/rubocop/cop/offense.rb
CHANGED
@@ -63,10 +63,23 @@ module RuboCop
|
|
63
63
|
attr_reader :corrector
|
64
64
|
|
65
65
|
PseudoSourceRange = Struct.new(:line, :column, :source_line, :begin_pos,
|
66
|
-
:end_pos)
|
66
|
+
:end_pos) do
|
67
|
+
alias_method :first_line, :line
|
68
|
+
alias_method :last_line, :line
|
69
|
+
alias_method :last_column, :column
|
70
|
+
|
71
|
+
def column_range
|
72
|
+
column...last_column
|
73
|
+
end
|
74
|
+
|
75
|
+
def size
|
76
|
+
end_pos - begin_pos
|
77
|
+
end
|
78
|
+
alias_method :length, :size
|
79
|
+
end
|
67
80
|
private_constant :PseudoSourceRange
|
68
81
|
|
69
|
-
NO_LOCATION = PseudoSourceRange.new(1, 0, '', 0,
|
82
|
+
NO_LOCATION = PseudoSourceRange.new(1, 0, '', 0, 0).freeze
|
70
83
|
|
71
84
|
# @api private
|
72
85
|
def initialize(severity, location, message, cop_name, # rubocop:disable Metrics/ParameterLists
|
@@ -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,14 +75,16 @@ 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?
|
86
|
-
return if node.parent
|
87
|
-
return if
|
85
|
+
return unless node.access_modifier?
|
86
|
+
return if node.parent&.pair_type?
|
87
|
+
return if allow_modifiers_on_symbols?(node)
|
88
88
|
|
89
89
|
if offense?(node)
|
90
90
|
add_offense(node.loc.selector) if opposite_style_detected
|
@@ -95,12 +95,8 @@ module RuboCop
|
|
95
95
|
|
96
96
|
private
|
97
97
|
|
98
|
-
def
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
def maybe_access_modifier?(node)
|
103
|
-
!node.receiver && ACCESS_MODIFIERS.include?(node.method_name)
|
98
|
+
def allow_modifiers_on_symbols?(node)
|
99
|
+
cop_config['AllowModifiersOnSymbols'] && access_modifier_with_symbol?(node)
|
104
100
|
end
|
105
101
|
|
106
102
|
def offense?(node)
|
@@ -7,6 +7,9 @@ module RuboCop
|
|
7
7
|
# By default it enforces accessors to be placed in grouped declarations,
|
8
8
|
# but it can be configured to enforce separating them in multiple declarations.
|
9
9
|
#
|
10
|
+
# Note: `Sorbet` is not compatible with "grouped" style. Consider "separated" style
|
11
|
+
# or disabling this cop.
|
12
|
+
#
|
10
13
|
# @example EnforcedStyle: grouped (default)
|
11
14
|
# # bad
|
12
15
|
# class Foo
|
@@ -32,6 +32,8 @@ module RuboCop
|
|
32
32
|
MSG_SYMBOL_ARGS = 'Use `alias %<prefer>s` instead of ' \
|
33
33
|
'`alias %<current>s`.'
|
34
34
|
|
35
|
+
RESTRICT_ON_SEND = %i[alias_method].freeze
|
36
|
+
|
35
37
|
def on_send(node)
|
36
38
|
return unless node.command?(:alias_method)
|
37
39
|
return unless style == :prefer_alias && alias_keyword_possible?(node)
|
@@ -5,6 +5,10 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop enforces the use of `Array()` instead of explicit `Array` check or `[*var]`.
|
7
7
|
#
|
8
|
+
# This cop is disabled by default because false positive will occur if
|
9
|
+
# the argument of `Array()` is not an array (e.g. Hash, Set),
|
10
|
+
# an array will be returned as an incompatibility result.
|
11
|
+
#
|
8
12
|
# @example
|
9
13
|
# # bad
|
10
14
|
# paths = [paths] unless paths.is_a?(Array)
|
@@ -33,11 +33,14 @@ module RuboCop
|
|
33
33
|
extend AutoCorrector
|
34
34
|
|
35
35
|
MSG = 'Avoid the use of the case equality operator `===`.'
|
36
|
+
RESTRICT_ON_SEND = %i[===].freeze
|
36
37
|
|
37
38
|
def_node_matcher :case_equality?, '(send $#const? :=== $_)'
|
38
39
|
|
39
40
|
def on_send(node)
|
40
41
|
case_equality?(node) do |lhs, rhs|
|
42
|
+
return if lhs.const_type? && !lhs.module_name?
|
43
|
+
|
41
44
|
add_offense(node.loc.selector) do |corrector|
|
42
45
|
replacement = replacement(lhs, rhs)
|
43
46
|
corrector.replace(node, replacement) if replacement
|
@@ -42,6 +42,8 @@ module RuboCop
|
|
42
42
|
convertible = true
|
43
43
|
|
44
44
|
branch_conditions(node).each do |branch_condition|
|
45
|
+
return false if regexp_with_working_captures?(branch_condition)
|
46
|
+
|
45
47
|
conditions << []
|
46
48
|
convertible = collect_conditions(branch_condition, target, conditions.last)
|
47
49
|
break unless convertible
|
@@ -49,9 +51,7 @@ module RuboCop
|
|
49
51
|
|
50
52
|
return unless convertible
|
51
53
|
|
52
|
-
add_offense(node)
|
53
|
-
autocorrect(corrector, node)
|
54
|
-
end
|
54
|
+
add_offense(node) { |corrector| autocorrect(corrector, node) }
|
55
55
|
end
|
56
56
|
|
57
57
|
private
|
@@ -107,7 +107,7 @@ module RuboCop
|
|
107
107
|
when :include?, :cover?
|
108
108
|
receiver = deparenthesize(node.receiver)
|
109
109
|
node.arguments.first if receiver.range_type?
|
110
|
-
when :match, :match
|
110
|
+
when :match, :match?, :=~
|
111
111
|
find_target_in_match_node(node)
|
112
112
|
end
|
113
113
|
end
|
@@ -230,6 +230,22 @@ module RuboCop
|
|
230
230
|
def indent(node)
|
231
231
|
' ' * node.loc.column
|
232
232
|
end
|
233
|
+
|
234
|
+
# Named captures work with `=~` (if regexp is on lhs) and with `match` (both sides)
|
235
|
+
def regexp_with_working_captures?(node)
|
236
|
+
case node.type
|
237
|
+
when :match_with_lvasgn
|
238
|
+
lhs, _rhs = *node
|
239
|
+
node.loc.selector.source == '=~' && regexp_with_named_captures?(lhs)
|
240
|
+
when :send
|
241
|
+
lhs, method, rhs = *node
|
242
|
+
method == :match && [lhs, rhs].any? { |n| regexp_with_named_captures?(n) }
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def regexp_with_named_captures?(node)
|
247
|
+
node.regexp_type? && node.each_capture(named: true).count.positive?
|
248
|
+
end
|
233
249
|
end
|
234
250
|
end
|
235
251
|
end
|
@@ -28,19 +28,16 @@ module RuboCop
|
|
28
28
|
extend AutoCorrector
|
29
29
|
|
30
30
|
MSG = 'Prefer `Object#%<prefer>s` over `Object#%<current>s`.'
|
31
|
-
|
32
|
-
def_node_matcher :class_check?, '(send _ ${:is_a? :kind_of?} _)'
|
31
|
+
RESTRICT_ON_SEND = %i[is_a? kind_of?].freeze
|
33
32
|
|
34
33
|
def on_send(node)
|
35
|
-
|
36
|
-
return if style == method_name
|
34
|
+
return if style == node.method_name
|
37
35
|
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
message = message(node)
|
37
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
38
|
+
replacement = node.method?(:is_a?) ? 'kind_of?' : 'is_a?'
|
41
39
|
|
42
|
-
|
43
|
-
end
|
40
|
+
corrector.replace(node.loc.selector, replacement)
|
44
41
|
end
|
45
42
|
end
|
46
43
|
|