rubocop 1.41.0 → 1.43.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/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/config/default.yml +34 -2
- data/lib/rubocop/cli.rb +1 -1
- data/lib/rubocop/config.rb +7 -7
- data/lib/rubocop/config_loader_resolver.rb +5 -1
- data/lib/rubocop/cop/base.rb +62 -61
- data/lib/rubocop/cop/cop.rb +28 -28
- data/lib/rubocop/cop/corrector.rb +23 -11
- data/lib/rubocop/cop/gemspec/dependency_version.rb +16 -18
- data/lib/rubocop/cop/layout/class_structure.rb +32 -11
- data/lib/rubocop/cop/layout/comment_indentation.rb +3 -1
- data/lib/rubocop/cop/layout/indentation_style.rb +4 -1
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +6 -6
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +19 -0
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +3 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +3 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -1
- data/lib/rubocop/cop/lint/useless_rescue.rb +71 -0
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +5 -3
- data/lib/rubocop/cop/metrics/parameter_lists.rb +27 -0
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -4
- data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +9 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -0
- data/lib/rubocop/cop/naming/block_forwarding.rb +1 -1
- data/lib/rubocop/cop/registry.rb +22 -22
- data/lib/rubocop/cop/security/compound_hash.rb +2 -1
- data/lib/rubocop/cop/style/alias.rb +9 -1
- data/lib/rubocop/cop/style/block_comments.rb +1 -1
- data/lib/rubocop/cop/style/concat_array_literals.rb +22 -2
- data/lib/rubocop/cop/style/documentation.rb +10 -4
- data/lib/rubocop/cop/style/guard_clause.rb +12 -8
- data/lib/rubocop/cop/style/hash_each_methods.rb +13 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +11 -7
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +15 -0
- data/lib/rubocop/cop/style/map_to_set.rb +61 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +12 -9
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -4
- data/lib/rubocop/cop/style/min_max_comparison.rb +73 -0
- data/lib/rubocop/cop/style/missing_else.rb +13 -1
- data/lib/rubocop/cop/style/operator_method_call.rb +15 -1
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +2 -1
- data/lib/rubocop/cop/style/redundant_string_escape.rb +6 -3
- data/lib/rubocop/cop/style/require_order.rb +4 -2
- data/lib/rubocop/cop/style/select_by_regexp.rb +6 -2
- data/lib/rubocop/cop/style/signal_exception.rb +8 -6
- data/lib/rubocop/cop/style/string_hash_keys.rb +4 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -4
- data/lib/rubocop/cop/style/word_array.rb +41 -0
- data/lib/rubocop/cop/style/yoda_expression.rb +81 -0
- data/lib/rubocop/cop/style/zero_length_predicate.rb +31 -14
- data/lib/rubocop/cop/team.rb +29 -29
- data/lib/rubocop/cop/variable_force.rb +0 -3
- data/lib/rubocop/cops_documentation_generator.rb +11 -8
- data/lib/rubocop/formatter.rb +2 -0
- data/lib/rubocop/path_util.rb +17 -7
- data/lib/rubocop/result_cache.rb +1 -1
- data/lib/rubocop/runner.rb +10 -3
- data/lib/rubocop/target_ruby.rb +0 -1
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +4 -0
- metadata +13 -9
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# Forbids Yoda expressions, i.e. binary operations (using `*`, `+`, `&`, `|`,
|
7
|
+
# and `^` operators) where the order of expression is reversed, eg. `1 + x`.
|
8
|
+
# This cop complements `Style/YodaCondition` cop, which has a similar purpose.
|
9
|
+
#
|
10
|
+
# This cop is disabled by default to respect user intentions such as:
|
11
|
+
#
|
12
|
+
# [source,ruby]
|
13
|
+
# ----
|
14
|
+
# config.server_port = 9000 + ENV["TEST_ENV_NUMBER"].to_i
|
15
|
+
# ----
|
16
|
+
#
|
17
|
+
# @safety
|
18
|
+
# This cop is unsafe because binary operators can be defined
|
19
|
+
# differently on different classes, and are not guaranteed to
|
20
|
+
# have the same result if reversed.
|
21
|
+
#
|
22
|
+
# @example SupportedOperators: ['*', '+', '&'']
|
23
|
+
# # bad
|
24
|
+
# 1 + x
|
25
|
+
# 10 * y
|
26
|
+
# 1 & z
|
27
|
+
#
|
28
|
+
# # good
|
29
|
+
# 60 * 24
|
30
|
+
# x + 1
|
31
|
+
# y * 10
|
32
|
+
# z & 1
|
33
|
+
#
|
34
|
+
# # good
|
35
|
+
# 1 | x
|
36
|
+
#
|
37
|
+
class YodaExpression < Base
|
38
|
+
extend AutoCorrector
|
39
|
+
|
40
|
+
MSG = 'Non-literal operand (`%<source>s`) should be first.'
|
41
|
+
|
42
|
+
RESTRICT_ON_SEND = %i[* + & | ^].freeze
|
43
|
+
|
44
|
+
def on_new_investigation
|
45
|
+
@offended_nodes = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
def on_send(node)
|
49
|
+
return unless supported_operators.include?(node.method_name.to_s)
|
50
|
+
|
51
|
+
lhs = node.receiver
|
52
|
+
rhs = node.first_argument
|
53
|
+
return if !lhs.numeric_type? || rhs.numeric_type?
|
54
|
+
|
55
|
+
return if offended_ancestor?(node)
|
56
|
+
|
57
|
+
message = format(MSG, source: rhs.source)
|
58
|
+
add_offense(node, message: message) do |corrector|
|
59
|
+
corrector.swap(lhs, rhs)
|
60
|
+
end
|
61
|
+
|
62
|
+
offended_nodes.add(node)
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def supported_operators
|
68
|
+
Array(cop_config['SupportedOperators'])
|
69
|
+
end
|
70
|
+
|
71
|
+
def offended_ancestor?(node)
|
72
|
+
node.each_ancestor(:send).any? { |ancestor| @offended_nodes&.include?(ancestor) }
|
73
|
+
end
|
74
|
+
|
75
|
+
def offended_nodes
|
76
|
+
@offended_nodes ||= Set.new.compare_by_identity
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -34,43 +34,55 @@ module RuboCop
|
|
34
34
|
class ZeroLengthPredicate < Base
|
35
35
|
extend AutoCorrector
|
36
36
|
|
37
|
-
ZERO_MSG = 'Use `empty?` instead of `%<
|
38
|
-
NONZERO_MSG = 'Use `!empty?` instead of `%<
|
37
|
+
ZERO_MSG = 'Use `empty?` instead of `%<current>s`.'
|
38
|
+
NONZERO_MSG = 'Use `!empty?` instead of `%<current>s`.'
|
39
39
|
|
40
40
|
RESTRICT_ON_SEND = %i[size length].freeze
|
41
41
|
|
42
42
|
def on_send(node)
|
43
43
|
check_zero_length_predicate(node)
|
44
|
-
|
44
|
+
check_zero_length_comparison(node)
|
45
|
+
check_nonzero_length_comparison(node)
|
45
46
|
end
|
46
47
|
|
47
48
|
private
|
48
49
|
|
49
50
|
def check_zero_length_predicate(node)
|
50
|
-
|
51
|
-
return unless zero_length_predicate
|
51
|
+
return unless (length_method = zero_length_predicate(node.parent))
|
52
52
|
|
53
|
-
|
53
|
+
offense = node.loc.selector.join(node.parent.source_range.end)
|
54
|
+
message = format(ZERO_MSG, current: "#{length_method}.zero?")
|
55
|
+
|
56
|
+
add_offense(offense, message: message) do |corrector|
|
57
|
+
corrector.replace(offense, 'empty?')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def check_zero_length_comparison(node)
|
62
|
+
zero_length_comparison = zero_length_comparison(node.parent)
|
63
|
+
return unless zero_length_comparison
|
64
|
+
|
65
|
+
lhs, opr, rhs = zero_length_comparison
|
54
66
|
|
55
67
|
return if non_polymorphic_collection?(node.parent)
|
56
68
|
|
57
69
|
add_offense(
|
58
|
-
node.parent, message: format(ZERO_MSG,
|
70
|
+
node.parent, message: format(ZERO_MSG, current: "#{lhs} #{opr} #{rhs}")
|
59
71
|
) do |corrector|
|
60
72
|
corrector.replace(node.parent, replacement(node.parent))
|
61
73
|
end
|
62
74
|
end
|
63
75
|
|
64
|
-
def
|
65
|
-
|
66
|
-
return unless
|
76
|
+
def check_nonzero_length_comparison(node)
|
77
|
+
nonzero_length_comparison = nonzero_length_comparison(node.parent)
|
78
|
+
return unless nonzero_length_comparison
|
67
79
|
|
68
|
-
lhs, opr, rhs =
|
80
|
+
lhs, opr, rhs = nonzero_length_comparison
|
69
81
|
|
70
82
|
return if non_polymorphic_collection?(node.parent)
|
71
83
|
|
72
84
|
add_offense(
|
73
|
-
node.parent, message: format(NONZERO_MSG,
|
85
|
+
node.parent, message: format(NONZERO_MSG, current: "#{lhs} #{opr} #{rhs}")
|
74
86
|
) do |corrector|
|
75
87
|
corrector.replace(node.parent, replacement(node.parent))
|
76
88
|
end
|
@@ -78,14 +90,19 @@ module RuboCop
|
|
78
90
|
|
79
91
|
# @!method zero_length_predicate(node)
|
80
92
|
def_node_matcher :zero_length_predicate, <<~PATTERN
|
93
|
+
(send (send (...) ${:length :size}) :zero?)
|
94
|
+
PATTERN
|
95
|
+
|
96
|
+
# @!method zero_length_comparison(node)
|
97
|
+
def_node_matcher :zero_length_comparison, <<~PATTERN
|
81
98
|
{(send (send (...) ${:length :size}) $:== (int $0))
|
82
99
|
(send (int $0) $:== (send (...) ${:length :size}))
|
83
100
|
(send (send (...) ${:length :size}) $:< (int $1))
|
84
101
|
(send (int $1) $:> (send (...) ${:length :size}))}
|
85
102
|
PATTERN
|
86
103
|
|
87
|
-
# @!method
|
88
|
-
def_node_matcher :
|
104
|
+
# @!method nonzero_length_comparison(node)
|
105
|
+
def_node_matcher :nonzero_length_comparison, <<~PATTERN
|
89
106
|
{(send (send (...) ${:length :size}) ${:> :!=} (int $0))
|
90
107
|
(send (int $0) ${:< :!=} (send (...) ${:length :size}))}
|
91
108
|
PATTERN
|
data/lib/rubocop/cop/team.rb
CHANGED
@@ -10,20 +10,6 @@ module RuboCop
|
|
10
10
|
# first the ones needed for autocorrection (if any), then the rest
|
11
11
|
# (unless autocorrections happened).
|
12
12
|
class Team
|
13
|
-
attr_reader :errors, :warnings, :updated_source_file, :cops
|
14
|
-
|
15
|
-
alias updated_source_file? updated_source_file
|
16
|
-
|
17
|
-
def initialize(cops, config = nil, options = {})
|
18
|
-
@cops = cops
|
19
|
-
@config = config
|
20
|
-
@options = options
|
21
|
-
reset
|
22
|
-
@ready = true
|
23
|
-
|
24
|
-
validate_config
|
25
|
-
end
|
26
|
-
|
27
13
|
# @return [Team]
|
28
14
|
def self.new(cop_or_classes, config, options = {})
|
29
15
|
# Support v0 api:
|
@@ -47,6 +33,35 @@ module RuboCop
|
|
47
33
|
end
|
48
34
|
end
|
49
35
|
|
36
|
+
# @return [Array<Force>] needed for the given cops
|
37
|
+
def self.forces_for(cops)
|
38
|
+
needed = Hash.new { |h, k| h[k] = [] }
|
39
|
+
cops.each do |cop|
|
40
|
+
forces = cop.class.joining_forces
|
41
|
+
if forces.is_a?(Array)
|
42
|
+
forces.each { |force| needed[force] << cop }
|
43
|
+
elsif forces
|
44
|
+
needed[forces] << cop
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
needed.map { |force_class, joining_cops| force_class.new(joining_cops) }
|
49
|
+
end
|
50
|
+
|
51
|
+
attr_reader :errors, :warnings, :updated_source_file, :cops
|
52
|
+
|
53
|
+
alias updated_source_file? updated_source_file
|
54
|
+
|
55
|
+
def initialize(cops, config = nil, options = {})
|
56
|
+
@cops = cops
|
57
|
+
@config = config
|
58
|
+
@options = options
|
59
|
+
reset
|
60
|
+
@ready = true
|
61
|
+
|
62
|
+
validate_config
|
63
|
+
end
|
64
|
+
|
50
65
|
def autocorrect?
|
51
66
|
@options[:autocorrect]
|
52
67
|
end
|
@@ -94,21 +109,6 @@ module RuboCop
|
|
94
109
|
@forces ||= self.class.forces_for(cops)
|
95
110
|
end
|
96
111
|
|
97
|
-
# @return [Array<Force>] needed for the given cops
|
98
|
-
def self.forces_for(cops)
|
99
|
-
needed = Hash.new { |h, k| h[k] = [] }
|
100
|
-
cops.each do |cop|
|
101
|
-
forces = cop.class.joining_forces
|
102
|
-
if forces.is_a?(Array)
|
103
|
-
forces.each { |force| needed[force] << cop }
|
104
|
-
elsif forces
|
105
|
-
needed[forces] << cop
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
needed.map { |force_class, joining_cops| force_class.new(joining_cops) }
|
110
|
-
end
|
111
|
-
|
112
112
|
def external_dependency_checksum
|
113
113
|
keys = cops.map(&:external_dependency_checksum).compact
|
114
114
|
Digest::SHA1.hexdigest(keys.join)
|
@@ -108,7 +108,6 @@ module RuboCop
|
|
108
108
|
:skip_children
|
109
109
|
end
|
110
110
|
|
111
|
-
# rubocop:disable Layout/ClassStructure
|
112
111
|
NODE_HANDLER_METHOD_NAMES = [
|
113
112
|
[VARIABLE_ASSIGNMENT_TYPE, :process_variable_assignment],
|
114
113
|
[REGEXP_NAMED_CAPTURE_TYPE, :process_regexp_named_captures],
|
@@ -123,8 +122,6 @@ module RuboCop
|
|
123
122
|
*SCOPE_TYPES.product([:process_scope])
|
124
123
|
].to_h.freeze
|
125
124
|
private_constant :NODE_HANDLER_METHOD_NAMES
|
126
|
-
# rubocop:enable Layout/ClassStructure
|
127
|
-
|
128
125
|
def node_handler_method_name(node)
|
129
126
|
NODE_HANDLER_METHOD_NAMES[node.type]
|
130
127
|
end
|
@@ -33,7 +33,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
33
33
|
cops.with_department(department).sort!
|
34
34
|
end
|
35
35
|
|
36
|
-
def cops_body(cop, description, examples_objects, safety_objects, pars) # rubocop:disable Metrics/AbcSize
|
36
|
+
def cops_body(cop, description, examples_objects, safety_objects, see_objects, pars) # rubocop:disable Metrics/AbcSize, Metrics/ParameterLists
|
37
37
|
check_examples_to_have_the_default_enforced_style!(examples_objects, cop)
|
38
38
|
|
39
39
|
content = h2(cop.cop_name)
|
@@ -43,7 +43,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
43
43
|
content << safety_object(safety_objects) if safety_objects.any? { |s| !s.text.blank? }
|
44
44
|
content << examples(examples_objects) if examples_objects.any?
|
45
45
|
content << configurations(cop.department, pars)
|
46
|
-
content << references(cop)
|
46
|
+
content << references(cop, see_objects)
|
47
47
|
content
|
48
48
|
end
|
49
49
|
|
@@ -224,14 +224,16 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
224
224
|
end
|
225
225
|
end
|
226
226
|
|
227
|
-
def references(cop)
|
227
|
+
def references(cop, see_objects) # rubocop:disable Metrics/AbcSize
|
228
228
|
cop_config = config.for_cop(cop)
|
229
229
|
urls = RuboCop::Cop::MessageAnnotator.new(config, cop.name, cop_config, {}).urls
|
230
|
-
return '' if urls.empty?
|
230
|
+
return '' if urls.empty? && see_objects.empty?
|
231
231
|
|
232
232
|
content = h3('References')
|
233
233
|
content << urls.map { |url| "* #{url}" }.join("\n")
|
234
|
-
content << "\n"
|
234
|
+
content << "\n" unless urls.empty?
|
235
|
+
content << see_objects.map { |see| "* #{see.name}" }.join("\n")
|
236
|
+
content << "\n" unless see_objects.empty?
|
235
237
|
content
|
236
238
|
end
|
237
239
|
|
@@ -257,7 +259,7 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
257
259
|
end
|
258
260
|
end
|
259
261
|
|
260
|
-
def print_cop_with_doc(cop)
|
262
|
+
def print_cop_with_doc(cop) # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
|
261
263
|
cop_config = config.for_cop(cop)
|
262
264
|
non_display_keys = %w[
|
263
265
|
Description Enabled StyleGuide Reference Safe SafeAutoCorrect VersionAdded
|
@@ -265,13 +267,14 @@ class CopsDocumentationGenerator # rubocop:disable Metrics/ClassLength
|
|
265
267
|
]
|
266
268
|
pars = cop_config.reject { |k| non_display_keys.include? k }
|
267
269
|
description = 'No documentation'
|
268
|
-
examples_object = safety_object = []
|
270
|
+
examples_object = safety_object = see_object = []
|
269
271
|
cop_code(cop) do |code_object|
|
270
272
|
description = code_object.docstring unless code_object.docstring.blank?
|
271
273
|
examples_object = code_object.tags('example')
|
272
274
|
safety_object = code_object.tags('safety')
|
275
|
+
see_object = code_object.tags('see')
|
273
276
|
end
|
274
|
-
cops_body(cop, description, examples_object, safety_object, pars)
|
277
|
+
cops_body(cop, description, examples_object, safety_object, see_object, pars)
|
275
278
|
end
|
276
279
|
|
277
280
|
def cop_code(cop)
|
data/lib/rubocop/formatter.rb
CHANGED
data/lib/rubocop/path_util.rb
CHANGED
@@ -28,14 +28,19 @@ module RuboCop
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
SMART_PATH_CACHE = {} # rubocop:disable Style/MutableConstant
|
32
|
+
private_constant :SMART_PATH_CACHE
|
33
|
+
|
31
34
|
def smart_path(path)
|
32
|
-
|
33
|
-
|
35
|
+
SMART_PATH_CACHE[path] ||= begin
|
36
|
+
# Ideally, we calculate this relative to the project root.
|
37
|
+
base_dir = Dir.pwd
|
34
38
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
+
if path.start_with? base_dir
|
40
|
+
relative_path(path, base_dir)
|
41
|
+
else
|
42
|
+
path
|
43
|
+
end
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
@@ -46,7 +51,7 @@ module RuboCop
|
|
46
51
|
matches =
|
47
52
|
if pattern == path
|
48
53
|
true
|
49
|
-
elsif
|
54
|
+
elsif glob?(pattern)
|
50
55
|
File.fnmatch?(pattern, path, File::FNM_PATHNAME | File::FNM_EXTGLOB)
|
51
56
|
end
|
52
57
|
|
@@ -68,6 +73,11 @@ module RuboCop
|
|
68
73
|
%r{\A([A-Z]:)?/}i.match?(path)
|
69
74
|
end
|
70
75
|
|
76
|
+
# Returns true for a glob
|
77
|
+
def glob?(path)
|
78
|
+
path.match?(/[*{\[?]/)
|
79
|
+
end
|
80
|
+
|
71
81
|
def hidden_file_in_not_hidden_dir?(pattern, path)
|
72
82
|
hidden_file?(path) &&
|
73
83
|
File.fnmatch?(
|
data/lib/rubocop/result_cache.rb
CHANGED
@@ -53,7 +53,7 @@ module RuboCop
|
|
53
53
|
def remove_oldest_files(files, dirs, cache_root, verbose)
|
54
54
|
# Add 1 to half the number of files, so that we remove the file if
|
55
55
|
# there's only 1 left.
|
56
|
-
remove_count =
|
56
|
+
remove_count = (files.length / 2) + 1
|
57
57
|
puts "Removing the #{remove_count} oldest files from #{cache_root}" if verbose
|
58
58
|
sorted = files.sort_by { |path| File.mtime(path) }
|
59
59
|
remove_files(sorted, dirs, remove_count)
|
data/lib/rubocop/runner.rb
CHANGED
@@ -27,6 +27,11 @@ module RuboCop
|
|
27
27
|
# @api private
|
28
28
|
MAX_ITERATIONS = 200
|
29
29
|
|
30
|
+
# @api private
|
31
|
+
REDUNDANT_COP_DISABLE_DIRECTIVE_RULES = %w[
|
32
|
+
Lint/RedundantCopDisableDirective RedundantCopDisableDirective Lint
|
33
|
+
].freeze
|
34
|
+
|
30
35
|
attr_reader :errors, :warnings
|
31
36
|
attr_writer :aborting
|
32
37
|
|
@@ -194,7 +199,9 @@ module RuboCop
|
|
194
199
|
end
|
195
200
|
|
196
201
|
def check_for_redundant_disables?(source)
|
197
|
-
|
202
|
+
return false if source.disabled_line_ranges.empty? || except_redundant_cop_disable_directive?
|
203
|
+
|
204
|
+
!@options[:only]
|
198
205
|
end
|
199
206
|
|
200
207
|
def redundant_cop_disable_directive(file)
|
@@ -205,8 +212,8 @@ module RuboCop
|
|
205
212
|
yield cop if cop.relevant_file?(file)
|
206
213
|
end
|
207
214
|
|
208
|
-
def
|
209
|
-
@options[:except]
|
215
|
+
def except_redundant_cop_disable_directive?
|
216
|
+
@options[:except] && (@options[:except] & REDUNDANT_COP_DISABLE_DIRECTIVE_RULES).any?
|
210
217
|
end
|
211
218
|
|
212
219
|
def file_started(file)
|
data/lib/rubocop/target_ruby.rb
CHANGED
data/lib/rubocop/version.rb
CHANGED
data/lib/rubocop.rb
CHANGED
@@ -399,6 +399,7 @@ require_relative 'rubocop/cop/lint/useless_access_modifier'
|
|
399
399
|
require_relative 'rubocop/cop/lint/useless_assignment'
|
400
400
|
require_relative 'rubocop/cop/lint/useless_else_without_rescue'
|
401
401
|
require_relative 'rubocop/cop/lint/useless_method_definition'
|
402
|
+
require_relative 'rubocop/cop/lint/useless_rescue'
|
402
403
|
require_relative 'rubocop/cop/lint/useless_ruby2_keywords'
|
403
404
|
require_relative 'rubocop/cop/lint/useless_setter_call'
|
404
405
|
require_relative 'rubocop/cop/lint/useless_times'
|
@@ -538,8 +539,10 @@ require_relative 'rubocop/cop/style/lambda_call'
|
|
538
539
|
require_relative 'rubocop/cop/style/line_end_concatenation'
|
539
540
|
require_relative 'rubocop/cop/style/magic_comment_format'
|
540
541
|
require_relative 'rubocop/cop/style/map_to_hash'
|
542
|
+
require_relative 'rubocop/cop/style/map_to_set'
|
541
543
|
require_relative 'rubocop/cop/style/method_call_without_args_parentheses'
|
542
544
|
require_relative 'rubocop/cop/style/method_call_with_args_parentheses'
|
545
|
+
require_relative 'rubocop/cop/style/min_max_comparison'
|
543
546
|
require_relative 'rubocop/cop/style/multiline_in_pattern_then'
|
544
547
|
require_relative 'rubocop/cop/style/numbered_parameters'
|
545
548
|
require_relative 'rubocop/cop/style/open_struct_use'
|
@@ -675,6 +678,7 @@ require_relative 'rubocop/cop/style/while_until_do'
|
|
675
678
|
require_relative 'rubocop/cop/style/while_until_modifier'
|
676
679
|
require_relative 'rubocop/cop/style/word_array'
|
677
680
|
require_relative 'rubocop/cop/style/yoda_condition'
|
681
|
+
require_relative 'rubocop/cop/style/yoda_expression'
|
678
682
|
require_relative 'rubocop/cop/style/zero_length_predicate'
|
679
683
|
|
680
684
|
require_relative 'rubocop/cop/security/compound_hash'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.43.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2023-01-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
@@ -46,14 +46,14 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 3.
|
49
|
+
version: 3.2.0.0
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 3.
|
56
|
+
version: 3.2.0.0
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: rainbow
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
requirements:
|
121
121
|
- - ">="
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: 1.
|
123
|
+
version: 1.24.1
|
124
124
|
- - "<"
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '2.0'
|
@@ -130,7 +130,7 @@ dependencies:
|
|
130
130
|
requirements:
|
131
131
|
- - ">="
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: 1.
|
133
|
+
version: 1.24.1
|
134
134
|
- - "<"
|
135
135
|
- !ruby/object:Gem::Version
|
136
136
|
version: '2.0'
|
@@ -154,7 +154,7 @@ dependencies:
|
|
154
154
|
requirements:
|
155
155
|
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
157
|
+
version: 2.4.0
|
158
158
|
- - "<"
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '3.0'
|
@@ -164,7 +164,7 @@ dependencies:
|
|
164
164
|
requirements:
|
165
165
|
- - ">="
|
166
166
|
- !ruby/object:Gem::Version
|
167
|
-
version:
|
167
|
+
version: 2.4.0
|
168
168
|
- - "<"
|
169
169
|
- !ruby/object:Gem::Version
|
170
170
|
version: '3.0'
|
@@ -539,6 +539,7 @@ files:
|
|
539
539
|
- lib/rubocop/cop/lint/useless_assignment.rb
|
540
540
|
- lib/rubocop/cop/lint/useless_else_without_rescue.rb
|
541
541
|
- lib/rubocop/cop/lint/useless_method_definition.rb
|
542
|
+
- lib/rubocop/cop/lint/useless_rescue.rb
|
542
543
|
- lib/rubocop/cop/lint/useless_ruby2_keywords.rb
|
543
544
|
- lib/rubocop/cop/lint/useless_setter_call.rb
|
544
545
|
- lib/rubocop/cop/lint/useless_times.rb
|
@@ -760,6 +761,7 @@ files:
|
|
760
761
|
- lib/rubocop/cop/style/magic_comment_format.rb
|
761
762
|
- lib/rubocop/cop/style/map_compact_with_conditional_block.rb
|
762
763
|
- lib/rubocop/cop/style/map_to_hash.rb
|
764
|
+
- lib/rubocop/cop/style/map_to_set.rb
|
763
765
|
- lib/rubocop/cop/style/method_call_with_args_parentheses.rb
|
764
766
|
- lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb
|
765
767
|
- lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb
|
@@ -767,6 +769,7 @@ files:
|
|
767
769
|
- lib/rubocop/cop/style/method_called_on_do_end_block.rb
|
768
770
|
- lib/rubocop/cop/style/method_def_parentheses.rb
|
769
771
|
- lib/rubocop/cop/style/min_max.rb
|
772
|
+
- lib/rubocop/cop/style/min_max_comparison.rb
|
770
773
|
- lib/rubocop/cop/style/missing_else.rb
|
771
774
|
- lib/rubocop/cop/style/missing_respond_to_missing.rb
|
772
775
|
- lib/rubocop/cop/style/mixin_grouping.rb
|
@@ -898,6 +901,7 @@ files:
|
|
898
901
|
- lib/rubocop/cop/style/while_until_modifier.rb
|
899
902
|
- lib/rubocop/cop/style/word_array.rb
|
900
903
|
- lib/rubocop/cop/style/yoda_condition.rb
|
904
|
+
- lib/rubocop/cop/style/yoda_expression.rb
|
901
905
|
- lib/rubocop/cop/style/zero_length_predicate.rb
|
902
906
|
- lib/rubocop/cop/team.rb
|
903
907
|
- lib/rubocop/cop/util.rb
|
@@ -992,7 +996,7 @@ metadata:
|
|
992
996
|
homepage_uri: https://rubocop.org/
|
993
997
|
changelog_uri: https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md
|
994
998
|
source_code_uri: https://github.com/rubocop/rubocop/
|
995
|
-
documentation_uri: https://docs.rubocop.org/rubocop/1.
|
999
|
+
documentation_uri: https://docs.rubocop.org/rubocop/1.43/
|
996
1000
|
bug_tracker_uri: https://github.com/rubocop/rubocop/issues
|
997
1001
|
rubygems_mfa_required: 'true'
|
998
1002
|
post_install_message:
|