rubocop 0.89.0 → 0.89.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 +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/comment_config.rb +3 -5
- data/lib/rubocop/config.rb +1 -1
- data/lib/rubocop/config_loader.rb +1 -1
- data/lib/rubocop/config_validator.rb +1 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +3 -7
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +14 -21
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -1
- data/lib/rubocop/cop/lint/missing_super.rb +9 -9
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +33 -4
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +14 -17
- data/lib/rubocop/cop/lint/uri_regexp.rb +9 -25
- data/lib/rubocop/cop/migration/department_name.rb +2 -2
- data/lib/rubocop/cop/mixin/alignment.rb +2 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +0 -2
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +3 -3
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +5 -8
- data/lib/rubocop/cop/style/accessor_grouping.rb +20 -20
- data/lib/rubocop/cop/style/alias.rb +34 -33
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_join.rb +6 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +11 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -12
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_like_if.rb +17 -14
- data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +6 -10
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +6 -7
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/command_literal.rb +23 -24
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +1 -1
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +12 -12
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +7 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +2 -4
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -17
- data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +15 -16
- data/lib/rubocop/cop/style/empty_method.rb +5 -8
- data/lib/rubocop/cop/style/encoding.rb +5 -9
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +5 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +21 -24
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +17 -19
- data/lib/rubocop/cop/style/format_string_token.rb +4 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +3 -4
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +1 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_syntax.rb +0 -2
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +10 -12
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +23 -23
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +20 -29
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +11 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +7 -6
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +13 -13
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -1
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
- data/lib/rubocop/cop/style/multiline_memoization.rb +12 -10
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +0 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/util.rb +2 -0
- data/lib/rubocop/cops_documentation_generator.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/options.rb +3 -3
- data/lib/rubocop/rspec/shared_contexts.rb +1 -5
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3201b273ee3a04b13a9f41d768d230a5be311881c7fd0b39f24aa0d99a8a16ad
|
4
|
+
data.tar.gz: 794ba4bfcadcee6a8a9aae92f88c167dc1f75122e69f4bee08baa8f22976c1bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2ea28c0fbfaa2f37ef651b91f38e3084fda1d8c829ebc1aaa839c793f0b759deb692bc70482d863797ab33799af9e083ab7f274f4faa905b956b4b53fbab96b
|
7
|
+
data.tar.gz: 2ac4b6b2e1852c4ca1df725c6de4f6d34442633cb7dea00f27499ebae6e24ad006110dd0b473c781961d6e44819039a5e5748ac0de6ec0a1b2cbceb950c3fcf2
|
data/README.md
CHANGED
@@ -49,7 +49,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
|
|
49
49
|
might want to use a conservative version lock in your `Gemfile`:
|
50
50
|
|
51
51
|
```rb
|
52
|
-
gem 'rubocop', '~> 0.89.
|
52
|
+
gem 'rubocop', '~> 0.89.1', require: false
|
53
53
|
```
|
54
54
|
|
55
55
|
## Quickstart
|
@@ -128,9 +128,7 @@ module RuboCop
|
|
128
128
|
end
|
129
129
|
|
130
130
|
def each_directive
|
131
|
-
|
132
|
-
|
133
|
-
processed_source.each_comment do |comment|
|
131
|
+
processed_source.comments.each do |comment|
|
134
132
|
directive = directive_parts(comment)
|
135
133
|
next unless directive
|
136
134
|
|
@@ -153,11 +151,11 @@ module RuboCop
|
|
153
151
|
end
|
154
152
|
|
155
153
|
def qualified_cop_name(cop_name)
|
156
|
-
Cop::
|
154
|
+
Cop::Registry.qualified_cop_name(cop_name.strip, processed_source.file_path)
|
157
155
|
end
|
158
156
|
|
159
157
|
def all_cop_names
|
160
|
-
@all_cop_names ||= Cop::
|
158
|
+
@all_cop_names ||= Cop::Registry.global.names - [REDUNDANT_DISABLE]
|
161
159
|
end
|
162
160
|
|
163
161
|
def comment_only_line?(line_number)
|
data/lib/rubocop/config.rb
CHANGED
@@ -24,7 +24,7 @@ module RuboCop
|
|
24
24
|
def initialize(hash = {}, loaded_path = nil)
|
25
25
|
@loaded_path = loaded_path
|
26
26
|
@for_cop = Hash.new do |h, cop|
|
27
|
-
qualified_cop_name = Cop::
|
27
|
+
qualified_cop_name = Cop::Registry.qualified_cop_name(cop, loaded_path)
|
28
28
|
cop_options = self[qualified_cop_name] || {}
|
29
29
|
cop_options['Enabled'] = enable_cop?(qualified_cop_name, cop_options)
|
30
30
|
h[cop] = cop_options
|
@@ -73,7 +73,7 @@ module RuboCop
|
|
73
73
|
# `can't add a new key into hash during iteration` error
|
74
74
|
hash_keys = hash.keys
|
75
75
|
hash_keys.each do |key|
|
76
|
-
q = Cop::
|
76
|
+
q = Cop::Registry.qualified_cop_name(key, path)
|
77
77
|
next if q == key
|
78
78
|
|
79
79
|
hash[q] = hash.delete(key)
|
@@ -84,7 +84,7 @@ module RuboCop
|
|
84
84
|
unknown_cops = []
|
85
85
|
invalid_cop_names.each do |name|
|
86
86
|
# There could be a custom cop with this name. If so, don't warn
|
87
|
-
next if Cop::
|
87
|
+
next if Cop::Registry.global.contains_cop_matching?([name])
|
88
88
|
|
89
89
|
# Special case for inherit_mode, which is a directive that we keep in
|
90
90
|
# the configuration (even though it's not a cop), because it's easier
|
@@ -16,7 +16,7 @@ module RuboCop
|
|
16
16
|
processed_source:)
|
17
17
|
@processed_source = processed_source
|
18
18
|
range = first_part_of(node.to_a.last)
|
19
|
-
eol_comment =
|
19
|
+
eol_comment = processed_source.comment_at_line(node.source_range.line)
|
20
20
|
|
21
21
|
break_line_before(range: range, node: node, corrector: corrector,
|
22
22
|
configured_width: configured_width)
|
@@ -269,15 +269,11 @@ module RuboCop
|
|
269
269
|
end
|
270
270
|
|
271
271
|
def begin_pos_with_comment(node)
|
272
|
-
annotation_line = node.first_line - 1
|
273
272
|
first_comment = nil
|
273
|
+
(node.first_line - 1).downto(1) do |annotation_line|
|
274
|
+
break unless (comment = processed_source.comment_at_line(annotation_line))
|
274
275
|
|
275
|
-
|
276
|
-
.reverse_each do |comment|
|
277
|
-
if comment.location.line == annotation_line
|
278
|
-
first_comment = comment
|
279
|
-
annotation_line -= 1
|
280
|
-
end
|
276
|
+
first_comment = comment
|
281
277
|
end
|
282
278
|
|
283
279
|
start_line_position(first_comment || node)
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
39
39
|
'instead of %<correct_comment_indentation>d).'
|
40
40
|
|
41
41
|
def investigate(processed_source)
|
42
|
-
processed_source.
|
42
|
+
processed_source.comments.each { |comment| check(comment) }
|
43
43
|
end
|
44
44
|
|
45
45
|
def autocorrect(comment)
|
@@ -40,6 +40,7 @@ module RuboCop
|
|
40
40
|
def on_new_investigation
|
41
41
|
return if processed_source.blank?
|
42
42
|
|
43
|
+
@aligned_comments = aligned_locations(processed_source.comments.map(&:loc))
|
43
44
|
@corrected = Set.new if force_equal_sign_alignment?
|
44
45
|
|
45
46
|
processed_source.tokens.each_cons(2) do |token1, token2|
|
@@ -49,6 +50,18 @@ module RuboCop
|
|
49
50
|
|
50
51
|
private
|
51
52
|
|
53
|
+
def aligned_locations(locs)
|
54
|
+
return [] if locs.empty?
|
55
|
+
|
56
|
+
aligned = Set[locs.first.line, locs.last.line]
|
57
|
+
locs.each_cons(3) do |before, loc, after|
|
58
|
+
col = loc.column
|
59
|
+
aligned << loc.line if col == before.column || # rubocop:disable Style/MultipleComparison
|
60
|
+
col == after.column
|
61
|
+
end
|
62
|
+
aligned
|
63
|
+
end
|
64
|
+
|
52
65
|
def check_tokens(ast, token1, token2)
|
53
66
|
return if token2.type == :tNL
|
54
67
|
|
@@ -95,7 +108,7 @@ module RuboCop
|
|
95
108
|
|
96
109
|
def aligned_tok?(token)
|
97
110
|
if token.comment?
|
98
|
-
aligned_comments?(token)
|
111
|
+
@aligned_comments.include?(token.line)
|
99
112
|
else
|
100
113
|
aligned_with_something?(token.pos)
|
101
114
|
end
|
@@ -119,26 +132,6 @@ module RuboCop
|
|
119
132
|
end.compact
|
120
133
|
end
|
121
134
|
|
122
|
-
def aligned_comments?(comment_token)
|
123
|
-
ix = processed_source.comments.index do |comment|
|
124
|
-
comment.loc.expression.begin_pos == comment_token.begin_pos
|
125
|
-
end
|
126
|
-
aligned_with_previous_comment?(ix) || aligned_with_next_comment?(ix)
|
127
|
-
end
|
128
|
-
|
129
|
-
def aligned_with_previous_comment?(index)
|
130
|
-
index.positive? && comment_column(index - 1) == comment_column(index)
|
131
|
-
end
|
132
|
-
|
133
|
-
def aligned_with_next_comment?(index)
|
134
|
-
index < processed_source.comments.length - 1 &&
|
135
|
-
comment_column(index + 1) == comment_column(index)
|
136
|
-
end
|
137
|
-
|
138
|
-
def comment_column(index)
|
139
|
-
processed_source.comments[index].loc.column
|
140
|
-
end
|
141
|
-
|
142
135
|
def force_equal_sign_alignment?
|
143
136
|
cop_config['ForceEqualSignAlignment']
|
144
137
|
end
|
@@ -55,7 +55,7 @@ module RuboCop
|
|
55
55
|
MSG = 'Missing space after `#`.'
|
56
56
|
|
57
57
|
def investigate(processed_source)
|
58
|
-
processed_source.
|
58
|
+
processed_source.comments.each do |comment|
|
59
59
|
next unless /\A#+[^#\s=:+-]/.match?(comment.text)
|
60
60
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
61
61
|
next if doxygen_comment_style?(comment)
|
@@ -29,12 +29,13 @@ module RuboCop
|
|
29
29
|
#
|
30
30
|
class BinaryOperatorWithIdenticalOperands < Base
|
31
31
|
MSG = 'Binary operator `%<op>s` has identical operands.'
|
32
|
+
MATH_OPERATORS = %i[+ - * / % ** << >> | ^].to_set.freeze
|
32
33
|
|
33
34
|
def on_send(node)
|
34
35
|
return unless node.binary_operation?
|
35
36
|
|
36
37
|
lhs, operation, rhs = *node
|
37
|
-
return if
|
38
|
+
return if MATH_OPERATORS.include?(node.method_name) && rhs.basic_literal?
|
38
39
|
|
39
40
|
add_offense(node, message: format(MSG, op: operation)) if lhs == rhs
|
40
41
|
end
|
@@ -45,7 +45,13 @@ module RuboCop
|
|
45
45
|
|
46
46
|
OBJECT_LIFECYCLE_CALLBACKS = %i[method_missing respond_to_missing?].freeze
|
47
47
|
CLASS_LIFECYCLE_CALLBACKS = %i[inherited].freeze
|
48
|
-
|
48
|
+
METHOD_LIFECYCLE_CALLBACKS = %i[method_added method_removed method_undefined
|
49
|
+
singleton_method_added singleton_method_removed
|
50
|
+
singleton_method_undefined].freeze
|
51
|
+
|
52
|
+
CALLBACKS = (OBJECT_LIFECYCLE_CALLBACKS +
|
53
|
+
CLASS_LIFECYCLE_CALLBACKS +
|
54
|
+
METHOD_LIFECYCLE_CALLBACKS).to_set.freeze
|
49
55
|
|
50
56
|
def on_def(node)
|
51
57
|
return unless offender?(node)
|
@@ -70,15 +76,9 @@ module RuboCop
|
|
70
76
|
end
|
71
77
|
|
72
78
|
def callback_method_def?(node)
|
73
|
-
|
74
|
-
|
75
|
-
if OBJECT_LIFECYCLE_CALLBACKS.include?(method_name) ||
|
76
|
-
CLASS_LIFECYCLE_CALLBACKS.include?(method_name)
|
79
|
+
return unless CALLBACKS.include?(node.method_name)
|
77
80
|
|
78
|
-
|
79
|
-
elsif MODULE_LIFECYCLE_CALLBACKS.include?(method_name)
|
80
|
-
node.each_ancestor(:module).first
|
81
|
-
end
|
81
|
+
node.each_ancestor(:class, :sclass, :module).first
|
82
82
|
end
|
83
83
|
|
84
84
|
def contains_super?(node)
|
@@ -21,16 +21,38 @@ module RuboCop
|
|
21
21
|
class OutOfRangeRegexpRef < Base
|
22
22
|
MSG = 'Do not use out of range reference for the Regexp.'
|
23
23
|
|
24
|
+
REGEXP_RECEIVER_METHODS = %i[=~ === match].to_set.freeze
|
25
|
+
REGEXP_ARGUMENT_METHODS = %i[=~ match grep gsub gsub! sub sub! [] slice slice! index rindex
|
26
|
+
scan partition rpartition start_with? end_with?].to_set.freeze
|
27
|
+
REGEXP_CAPTURE_METHODS = (REGEXP_RECEIVER_METHODS + REGEXP_ARGUMENT_METHODS).freeze
|
28
|
+
|
24
29
|
def on_new_investigation
|
25
30
|
@valid_ref = 0
|
26
31
|
end
|
27
32
|
|
28
|
-
def
|
33
|
+
def on_match_with_lvasgn(node)
|
34
|
+
check_regexp(node.children.first)
|
35
|
+
end
|
36
|
+
|
37
|
+
def on_send(node)
|
38
|
+
return unless REGEXP_CAPTURE_METHODS.include?(node.method_name)
|
39
|
+
|
29
40
|
@valid_ref = nil
|
30
|
-
return if contain_non_literal?(node)
|
31
41
|
|
32
|
-
|
33
|
-
|
42
|
+
if node.receiver&.regexp_type?
|
43
|
+
check_regexp(node.receiver)
|
44
|
+
elsif node.first_argument&.regexp_type? \
|
45
|
+
&& REGEXP_ARGUMENT_METHODS.include?(node.method_name)
|
46
|
+
check_regexp(node.first_argument)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def on_when(node)
|
51
|
+
regexp_conditions = node.conditions.select(&:regexp_type?)
|
52
|
+
|
53
|
+
@valid_ref = regexp_conditions.map do |condition|
|
54
|
+
check_regexp(condition)
|
55
|
+
end.compact.max
|
34
56
|
end
|
35
57
|
|
36
58
|
def on_nth_ref(node)
|
@@ -42,6 +64,13 @@ module RuboCop
|
|
42
64
|
|
43
65
|
private
|
44
66
|
|
67
|
+
def check_regexp(regexp)
|
68
|
+
return if contain_non_literal?(regexp)
|
69
|
+
|
70
|
+
tree = Regexp::Parser.parse(regexp.content)
|
71
|
+
@valid_ref = regexp_captures(tree)
|
72
|
+
end
|
73
|
+
|
45
74
|
def contain_non_literal?(node)
|
46
75
|
node.children.size != 2 || !node.children.first.str_type?
|
47
76
|
end
|
@@ -41,13 +41,12 @@ module RuboCop
|
|
41
41
|
def on_new_investigation
|
42
42
|
return unless offenses_to_check
|
43
43
|
|
44
|
-
comments = processed_source.comments
|
45
44
|
cop_disabled_line_ranges = processed_source.disabled_line_ranges
|
46
45
|
|
47
46
|
redundant_cops = Hash.new { |h, k| h[k] = Set.new }
|
48
47
|
|
49
48
|
each_redundant_disable(cop_disabled_line_ranges,
|
50
|
-
offenses_to_check
|
49
|
+
offenses_to_check) do |comment, redundant_cop|
|
51
50
|
redundant_cops[comment].add(redundant_cop)
|
52
51
|
end
|
53
52
|
|
@@ -88,25 +87,25 @@ module RuboCop
|
|
88
87
|
newlines: false)
|
89
88
|
end
|
90
89
|
|
91
|
-
def each_redundant_disable(cop_disabled_line_ranges, offenses,
|
90
|
+
def each_redundant_disable(cop_disabled_line_ranges, offenses,
|
92
91
|
&block)
|
93
92
|
disabled_ranges = cop_disabled_line_ranges[COP_NAME] || [0..0]
|
94
93
|
|
95
94
|
cop_disabled_line_ranges.each do |cop, line_ranges|
|
96
95
|
each_already_disabled(line_ranges,
|
97
|
-
disabled_ranges
|
96
|
+
disabled_ranges) do |comment|
|
98
97
|
yield comment, cop
|
99
98
|
end
|
100
99
|
|
101
|
-
each_line_range(line_ranges, disabled_ranges, offenses,
|
100
|
+
each_line_range(line_ranges, disabled_ranges, offenses,
|
102
101
|
cop, &block)
|
103
102
|
end
|
104
103
|
end
|
105
104
|
|
106
|
-
def each_line_range(line_ranges, disabled_ranges, offenses,
|
105
|
+
def each_line_range(line_ranges, disabled_ranges, offenses,
|
107
106
|
cop)
|
108
107
|
line_ranges.each_with_index do |line_range, ix|
|
109
|
-
comment =
|
108
|
+
comment = processed_source.comment_at_line(line_range.begin)
|
110
109
|
next if ignore_offense?(disabled_ranges, line_range)
|
111
110
|
|
112
111
|
redundant_cop = find_redundant(comment, offenses, cop, line_range,
|
@@ -115,7 +114,7 @@ module RuboCop
|
|
115
114
|
end
|
116
115
|
end
|
117
116
|
|
118
|
-
def each_already_disabled(line_ranges, disabled_ranges
|
117
|
+
def each_already_disabled(line_ranges, disabled_ranges)
|
119
118
|
line_ranges.each_cons(2) do |previous_range, range|
|
120
119
|
next if ignore_offense?(disabled_ranges, range)
|
121
120
|
next if previous_range.end != range.begin
|
@@ -124,14 +123,12 @@ module RuboCop
|
|
124
123
|
# the end of the previous range, it means that the cop was
|
125
124
|
# already disabled by an earlier comment. So it's redundant
|
126
125
|
# whether there are offenses or not.
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
134
|
-
yield redundant_comment if redundant_comment
|
126
|
+
comment = processed_source.comment_at_line(range.begin)
|
127
|
+
|
128
|
+
# Comments disabling all cops don't count since it's reasonable
|
129
|
+
# to disable a few select cops first and then all cops further
|
130
|
+
# down in the code.
|
131
|
+
yield comment if comment && !all_disabled?(comment)
|
135
132
|
end
|
136
133
|
end
|
137
134
|
|
@@ -250,7 +247,7 @@ module RuboCop
|
|
250
247
|
end
|
251
248
|
|
252
249
|
def all_cop_names
|
253
|
-
@all_cop_names ||=
|
250
|
+
@all_cop_names ||= Registry.global.names
|
254
251
|
end
|
255
252
|
|
256
253
|
def ends_its_line?(range)
|
@@ -16,35 +16,19 @@ module RuboCop
|
|
16
16
|
class UriRegexp < Base
|
17
17
|
extend AutoCorrector
|
18
18
|
|
19
|
-
MSG = '`%<
|
20
|
-
|
21
|
-
'make_regexp%<arg>s`.'
|
22
|
-
|
23
|
-
def_node_matcher :uri_regexp_with_argument?, <<~PATTERN
|
24
|
-
(send
|
25
|
-
(const ${nil? cbase} :URI) :regexp
|
26
|
-
${(str _) (array ...)})
|
27
|
-
PATTERN
|
28
|
-
|
29
|
-
def_node_matcher :uri_regexp_without_argument?, <<~PATTERN
|
30
|
-
(send
|
31
|
-
(const ${nil? cbase} :URI) :regexp)
|
32
|
-
PATTERN
|
19
|
+
MSG = '`%<current>s` is obsolete and should not be used. Instead, use `%<preferred>s`.'
|
20
|
+
URI_CONSTANTS = ['URI', '::URI'].freeze
|
33
21
|
|
34
22
|
def on_send(node)
|
35
|
-
return unless node.method?(:regexp)
|
36
|
-
|
37
|
-
captured_values = uri_regexp_with_argument?(node) || uri_regexp_without_argument?(node)
|
38
|
-
|
39
|
-
double_colon, arg = captured_values
|
40
|
-
|
41
|
-
top_level = double_colon ? '::' : ''
|
42
|
-
argument = arg ? "(#{arg.source})" : ''
|
23
|
+
return unless node.method?(:regexp) && node.receiver
|
24
|
+
return unless URI_CONSTANTS.include?(node.receiver.source)
|
43
25
|
|
44
|
-
|
26
|
+
argument = node.first_argument ? "(#{node.first_argument.source})" : ''
|
27
|
+
preferred_method = "#{node.receiver.source}::DEFAULT_PARSER.make_regexp#{argument}"
|
28
|
+
message = format(MSG, current: node.source, preferred: preferred_method)
|
45
29
|
|
46
|
-
add_offense(node.loc.selector, message:
|
47
|
-
corrector.replace(node,
|
30
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
31
|
+
corrector.replace(node, preferred_method)
|
48
32
|
end
|
49
33
|
end
|
50
34
|
end
|
@@ -20,7 +20,7 @@ module RuboCop
|
|
20
20
|
DISABLING_COPS_CONTENT_TOKEN = %r{[A-z]+/[A-z]+|all}.freeze
|
21
21
|
|
22
22
|
def on_new_investigation
|
23
|
-
processed_source.
|
23
|
+
processed_source.comments.each do |comment|
|
24
24
|
next if comment.text !~ DISABLE_COMMENT_FORMAT
|
25
25
|
|
26
26
|
offset = Regexp.last_match(1).length
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
|
52
52
|
add_offense(range) do |corrector|
|
53
53
|
cop_name = range.source
|
54
|
-
qualified_cop_name =
|
54
|
+
qualified_cop_name = Registry.global.qualified_cop_name(cop_name, nil, warn: false)
|
55
55
|
|
56
56
|
unless qualified_cop_name.include?('/')
|
57
57
|
qualified_cop_name = qualified_legacy_cop_name(cop_name)
|