rubocop-performance 1.16.0 → 1.17.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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/config/default.yml +1 -0
  4. data/lib/rubocop/cop/performance/case_when_splat.rb +2 -2
  5. data/lib/rubocop/cop/performance/count.rb +1 -1
  6. data/lib/rubocop/cop/performance/detect.rb +3 -6
  7. data/lib/rubocop/cop/performance/double_start_end_with.rb +2 -2
  8. data/lib/rubocop/cop/performance/end_with.rb +1 -1
  9. data/lib/rubocop/cop/performance/flat_map.rb +6 -4
  10. data/lib/rubocop/cop/performance/inefficient_hash_search.rb +1 -1
  11. data/lib/rubocop/cop/performance/io_readlines.rb +1 -1
  12. data/lib/rubocop/cop/performance/redundant_block_call.rb +1 -1
  13. data/lib/rubocop/cop/performance/redundant_equality_comparison_block.rb +33 -1
  14. data/lib/rubocop/cop/performance/redundant_match.rb +1 -1
  15. data/lib/rubocop/cop/performance/redundant_merge.rb +2 -2
  16. data/lib/rubocop/cop/performance/redundant_string_chars.rb +2 -2
  17. data/lib/rubocop/cop/performance/regexp_match.rb +12 -12
  18. data/lib/rubocop/cop/performance/reverse_first.rb +1 -1
  19. data/lib/rubocop/cop/performance/select_map.rb +1 -1
  20. data/lib/rubocop/cop/performance/squeeze.rb +1 -1
  21. data/lib/rubocop/cop/performance/start_with.rb +1 -1
  22. data/lib/rubocop/cop/performance/string_identifier_argument.rb +15 -10
  23. data/lib/rubocop/cop/performance/string_include.rb +1 -1
  24. data/lib/rubocop/cop/performance/string_replacement.rb +1 -1
  25. data/lib/rubocop/cop/performance/sum.rb +1 -1
  26. data/lib/rubocop/cop/performance/times_map.rb +1 -1
  27. data/lib/rubocop/cop/performance/uri_default_parser.rb +1 -1
  28. data/lib/rubocop/performance/version.rb +1 -1
  29. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b0361feae763e4c8cbea3bd0160a1e4b0646b2e3b3246fb8dd55a5f21a53acd
4
- data.tar.gz: 152d09678555d309441fb809f60b07b69b04289b3949bf1eaca3e9b70b3afe13
3
+ metadata.gz: 3bb37421ad9500c9f9a40c5b46c46712bddee83783481b54ae1d3382f87ab9e2
4
+ data.tar.gz: 4219c118e704e6ef9b8221716354c734591a9fa8e914707d5271e309e38abb24
5
5
  SHA512:
6
- metadata.gz: 9f08bd2f25c0e0e537bf8fa5378e701d6b6b6794a45fe534229e73a0dd4bd623dd415965966655a802cc8e93a3776880d99c89245947aae090ba2c49f0bb183f
7
- data.tar.gz: 34f697ee70070d32d17b3684712cec5628e71cbdb393722fec3bb0dbc541cf65af92a762907dbbb0c5e6c3023f8dd4738e06a131a5a28014749dac440e15bc92
6
+ metadata.gz: ec972228315b462c622566b1265f177220cb9fe8390fd601a52556bbe34a05a934832d1fd7de3b2bfcc8b7b0529be33fa4f04a9ca050fedd9b3bdfcbf0d6032c
7
+ data.tar.gz: f5f50079efd8bb81b25127c9d65453636e15dfc2724482cbb3bc3710baa390050f028d442e122fbb5efde790b6354764202c13b1d6752e88ae7369394e7846cb
data/README.md CHANGED
@@ -11,7 +11,7 @@ Performance optimization analysis for your projects, as an extension to [RuboCop
11
11
  Just install the `rubocop-performance` gem
12
12
 
13
13
  ```sh
14
- gem install rubocop-performance
14
+ $ gem install rubocop-performance
15
15
  ```
16
16
 
17
17
  or if you use bundler put this in your `Gemfile`
@@ -47,7 +47,7 @@ cops together with the standard cops.
47
47
  ### Command line
48
48
 
49
49
  ```sh
50
- rubocop --require rubocop-performance
50
+ $ rubocop --require rubocop-performance
51
51
  ```
52
52
 
53
53
  ### Rake task
data/config/default.yml CHANGED
@@ -226,6 +226,7 @@ Performance/RedundantEqualityComparisonBlock:
226
226
  Reference: 'https://github.com/rails/rails/pull/41363'
227
227
  Enabled: pending
228
228
  Safe: false
229
+ AllowRegexpMatch: false
229
230
  VersionAdded: '1.10'
230
231
 
231
232
  Performance/RedundantMatch:
@@ -99,7 +99,7 @@ module RuboCop
99
99
 
100
100
  def inline_fix_branch(corrector, when_node)
101
101
  conditions = when_node.conditions
102
- range = range_between(conditions[0].loc.expression.begin_pos, conditions[-1].loc.expression.end_pos)
102
+ range = range_between(conditions[0].source_range.begin_pos, conditions[-1].source_range.end_pos)
103
103
 
104
104
  corrector.replace(range, replacement(conditions))
105
105
  end
@@ -110,7 +110,7 @@ module RuboCop
110
110
  return if when_branches.one?
111
111
 
112
112
  corrector.remove(when_branch_range(when_node))
113
- corrector.insert_after(when_branches.last.source_range, reordering_correction(when_node))
113
+ corrector.insert_after(when_branches.last, reordering_correction(when_node))
114
114
  end
115
115
 
116
116
  def reordering_correction(when_node)
@@ -110,7 +110,7 @@ module RuboCop
110
110
 
111
111
  def negate_block_pass_reject(corrector, node)
112
112
  corrector.replace(
113
- node.receiver.loc.expression.with(begin_pos: node.receiver.loc.begin.begin_pos),
113
+ node.receiver.source_range.with(begin_pos: node.receiver.loc.begin.begin_pos),
114
114
  negate_block_pass_as_inline_block(node.receiver)
115
115
  )
116
116
  end
@@ -8,12 +8,9 @@ module RuboCop
8
8
  # `detect` instead.
9
9
  #
10
10
  # @safety
11
- # This cop is unsafe because is assumes the class implements the
12
- # `Enumerable` interface, but can't reliably detect this. This creates
13
- # known compatibility issues with `Hash`, `ActiveRecord` and other
14
- # frameworks. `Hash` and `ActiveRecord` do not implement a `detect`
15
- # method and `find` has its own meaning. Correcting `Hash` and
16
- # `ActiveRecord` methods with this cop should be considered unsafe.
11
+ # This cop is unsafe because it assumes that the receiver is an
12
+ # `Array` or equivalent, but can't reliably detect it. For example,
13
+ # if the receiver is a `Hash`, it may report a false positive.
17
14
  #
18
15
  # @example
19
16
  # # bad
@@ -58,8 +58,8 @@ module RuboCop
58
58
  private
59
59
 
60
60
  def autocorrect(corrector, first_call_args, second_call_args, combined_args)
61
- first_argument = first_call_args.first.loc.expression
62
- last_argument = second_call_args.last.loc.expression
61
+ first_argument = first_call_args.first.source_range
62
+ last_argument = second_call_args.last.source_range
63
63
  range = first_argument.join(last_argument)
64
64
 
65
65
  corrector.replace(range, combined_args)
@@ -69,7 +69,7 @@ module RuboCop
69
69
 
70
70
  new_source = "#{receiver.source}.end_with?(#{to_string_literal(regex_str)})"
71
71
 
72
- corrector.replace(node.source_range, new_source)
72
+ corrector.replace(node, new_source)
73
73
  end
74
74
  end
75
75
  alias on_match_with_lvasgn on_send
@@ -28,7 +28,7 @@ module RuboCop
28
28
  def_node_matcher :flat_map_candidate?, <<~PATTERN
29
29
  (send
30
30
  {
31
- (block $(send _ ${:collect :map}) ...)
31
+ $(block (send _ ${:collect :map}) ...)
32
32
  $(send _ ${:collect :map} (block_pass _))
33
33
  }
34
34
  ${:flatten :flatten!}
@@ -60,7 +60,8 @@ module RuboCop
60
60
  end
61
61
 
62
62
  def register_offense(node, map_node, first_method, flatten, message)
63
- range = range_between(map_node.loc.selector.begin_pos, node.loc.expression.end_pos)
63
+ map_send_node = map_node.block_type? ? map_node.send_node : map_node
64
+ range = range_between(map_send_node.loc.selector.begin_pos, node.source_range.end_pos)
64
65
  message = format(message, method: first_method, flatten: flatten)
65
66
 
66
67
  add_offense(range, message: message) do |corrector|
@@ -74,10 +75,11 @@ module RuboCop
74
75
 
75
76
  return unless flatten_level
76
77
 
77
- range = range_between(node.loc.dot.begin_pos, node.source_range.end_pos)
78
+ map_send_node = map_node.block_type? ? map_node.send_node : map_node
79
+ range = range_between(map_node.source_range.end_pos, node.source_range.end_pos)
78
80
 
79
81
  corrector.remove(range)
80
- corrector.replace(map_node.loc.selector, 'flat_map')
82
+ corrector.replace(map_send_node.loc.selector, 'flat_map')
81
83
  end
82
84
  end
83
85
  end
@@ -57,7 +57,7 @@ module RuboCop
57
57
  # Replace `keys.include?` or `values.include?` with the appropriate
58
58
  # `key?`/`value?` method.
59
59
  corrector.replace(
60
- node.loc.expression,
60
+ node,
61
61
  "#{autocorrect_hash_expression(node)}.#{autocorrect_method(node)}(#{autocorrect_argument(node)})"
62
62
  )
63
63
  end
@@ -95,7 +95,7 @@ module RuboCop
95
95
  begin_pos = readlines_call.loc.selector.begin_pos
96
96
 
97
97
  end_pos = if enumerable_call.method?(:each)
98
- enumerable_call.loc.expression.end_pos
98
+ enumerable_call.source_range.end_pos
99
99
  else
100
100
  enumerable_call.loc.dot.begin_pos
101
101
  end
@@ -75,7 +75,7 @@ module RuboCop
75
75
 
76
76
  new_source << CLOSE_PAREN if parentheses?(node) && !args.empty?
77
77
 
78
- corrector.replace(node.source_range, new_source)
78
+ corrector.replace(node, new_source)
79
79
  end
80
80
 
81
81
  def calls_to_report(argname, body)
@@ -10,6 +10,16 @@ module RuboCop
10
10
  # behavior is appropriately overridden in subclass. For example,
11
11
  # `Range#===` returns `true` when argument is within the range.
12
12
  #
13
+ # This cop has `AllowRegexpMatch` option and it is false by default because
14
+ # `regexp.match?('string')` often used in block changes to the opposite result:
15
+ #
16
+ # [source,ruby]
17
+ # ----
18
+ # [/pattern/].all? { |regexp| regexp.match?('pattern') } # => true
19
+ # [/pattern/].all? { |regexp| regexp =~ 'pattern' } # => true
20
+ # [/pattern/].all?('pattern') # => false
21
+ # ----
22
+ #
13
23
  # @safety
14
24
  # This cop is unsafe because `===` and `==` do not always behave the same.
15
25
  #
@@ -22,6 +32,19 @@ module RuboCop
22
32
  #
23
33
  # # good
24
34
  # items.all?(pattern)
35
+ # items.all?(Klass)
36
+ #
37
+ # @example AllowRegexpMatch: true (default)
38
+ #
39
+ # # good
40
+ # items.all? { |item| item =~ pattern }
41
+ # items.all? { |item| item.match?(pattern) }
42
+ #
43
+ # @example AllowRegexpMatch: false
44
+ #
45
+ # # bad
46
+ # items.all? { |item| item =~ pattern }
47
+ # items.all? { |item| item.match?(pattern) }
25
48
  #
26
49
  class RedundantEqualityComparisonBlock < Base
27
50
  extend AutoCorrector
@@ -33,6 +56,7 @@ module RuboCop
33
56
 
34
57
  TARGET_METHODS = %i[all? any? one? none?].freeze
35
58
  COMPARISON_METHODS = %i[== === is_a? kind_of?].freeze
59
+ REGEXP_METHODS = %i[=~ match?].freeze
36
60
  IS_A_METHODS = %i[is_a? kind_of?].freeze
37
61
 
38
62
  def on_block(node)
@@ -60,7 +84,11 @@ module RuboCop
60
84
  end
61
85
 
62
86
  def use_equality_comparison_block?(block_body)
63
- block_body.send_type? && COMPARISON_METHODS.include?(block_body.method_name)
87
+ return false unless block_body.send_type?
88
+
89
+ method_name = block_body.method_name
90
+
91
+ COMPARISON_METHODS.include?(method_name) || (!allow_regexp_match? && REGEXP_METHODS.include?(method_name))
64
92
  end
65
93
 
66
94
  def same_block_argument_and_is_a_argument?(block_body, block_argument)
@@ -99,6 +127,10 @@ module RuboCop
99
127
  def offense_range(node)
100
128
  node.send_node.loc.selector.join(node.source_range.end)
101
129
  end
130
+
131
+ def allow_regexp_match?
132
+ cop_config.fetch('AllowRegexpMatch', true)
133
+ end
102
134
  end
103
135
  end
104
136
  end
@@ -49,7 +49,7 @@ module RuboCop
49
49
  def autocorrect(corrector, node)
50
50
  new_source = "#{node.receiver.source} =~ #{node.first_argument.source}"
51
51
 
52
- corrector.replace(node.source_range, new_source)
52
+ corrector.replace(node, new_source)
53
53
  end
54
54
 
55
55
  def autocorrectable?(node)
@@ -112,11 +112,11 @@ module RuboCop
112
112
  new_source.gsub!(/\n/, padding)
113
113
  end
114
114
 
115
- corrector.replace(node.source_range, new_source)
115
+ corrector.replace(node, new_source)
116
116
  end
117
117
 
118
118
  def correct_single_element(corrector, node, new_source)
119
- corrector.replace(node.source_range, new_source)
119
+ corrector.replace(node, new_source)
120
120
  end
121
121
 
122
122
  def to_assignments(receiver, pairs)
@@ -69,11 +69,11 @@ module RuboCop
69
69
  private
70
70
 
71
71
  def offense_range(receiver, node)
72
- range_between(receiver.loc.selector.begin_pos, node.loc.expression.end_pos)
72
+ range_between(receiver.loc.selector.begin_pos, node.source_range.end_pos)
73
73
  end
74
74
 
75
75
  def correction_range(receiver, node)
76
- range_between(receiver.loc.dot.begin_pos, node.loc.expression.end_pos)
76
+ range_between(receiver.loc.dot.begin_pos, node.source_range.end_pos)
77
77
  end
78
78
 
79
79
  def build_message(method, args)
@@ -185,9 +185,9 @@ module RuboCop
185
185
 
186
186
  def range_to_search_for_last_matches(match_node, body, scope_root)
187
187
  expression = if modifier_form?(match_node)
188
- match_node.parent.if_branch.loc.expression
188
+ match_node.parent.if_branch.source_range
189
189
  else
190
- match_node.loc.expression
190
+ match_node.source_range
191
191
  end
192
192
 
193
193
  match_node_pos = expression.begin_pos
@@ -199,15 +199,15 @@ module RuboCop
199
199
  def next_match_pos(body, match_node_pos, scope_root)
200
200
  node = search_match_nodes(body).find do |match|
201
201
  begin_pos = if modifier_form?(match)
202
- match.parent.if_branch.loc.expression.begin_pos
202
+ match.parent.if_branch.source_range.begin_pos
203
203
  else
204
- match.loc.expression.begin_pos
204
+ match.source_range.begin_pos
205
205
  end
206
206
 
207
207
  begin_pos > match_node_pos && scope_root(match) == scope_root
208
208
  end
209
209
 
210
- node ? node.loc.expression.begin_pos : Float::INFINITY
210
+ node ? node.source_range.begin_pos : Float::INFINITY
211
211
  end
212
212
 
213
213
  def modifier_form?(match_node)
@@ -216,7 +216,7 @@ module RuboCop
216
216
 
217
217
  def find_last_match(body, range, scope_root)
218
218
  last_matches(body).find do |ref|
219
- ref_pos = ref.loc.expression.begin_pos
219
+ ref_pos = ref.source_range.begin_pos
220
220
  range.cover?(ref_pos) && scope_root(ref) == scope_root
221
221
  end
222
222
  end
@@ -248,8 +248,8 @@ module RuboCop
248
248
 
249
249
  replace_with_match_predicate_method(corrector, recv, arg, op_range)
250
250
 
251
- corrector.insert_after(arg.loc.expression, ')') unless op_range.source.end_with?('(')
252
- corrector.insert_before(recv.loc.expression, '!') if oper == :!~
251
+ corrector.insert_after(arg, ')') unless op_range.source.end_with?('(')
252
+ corrector.insert_before(recv, '!') if oper == :!~
253
253
  end
254
254
 
255
255
  def replace_with_match_predicate_method(corrector, recv, arg, op_range)
@@ -264,14 +264,14 @@ module RuboCop
264
264
  end
265
265
 
266
266
  def swap_receiver_and_arg(corrector, recv, arg)
267
- corrector.replace(recv.loc.expression, arg.source)
268
- corrector.replace(arg.loc.expression, recv.source)
267
+ corrector.replace(recv, arg.source)
268
+ corrector.replace(arg, recv.source)
269
269
  end
270
270
 
271
271
  def correction_range(recv, arg)
272
272
  buffer = processed_source.buffer
273
- op_begin_pos = recv.loc.expression.end_pos
274
- op_end_pos = arg.loc.expression.begin_pos
273
+ op_begin_pos = recv.source_range.end_pos
274
+ op_end_pos = arg.source_range.begin_pos
275
275
  Parser::Source::Range.new(buffer, op_begin_pos, op_end_pos)
276
276
  end
277
277
  end
@@ -43,7 +43,7 @@ module RuboCop
43
43
  private
44
44
 
45
45
  def correction_range(receiver, node)
46
- range_between(receiver.loc.selector.begin_pos, node.loc.expression.end_pos)
46
+ range_between(receiver.loc.selector.begin_pos, node.source_range.end_pos)
47
47
  end
48
48
 
49
49
  def build_message(node)
@@ -52,7 +52,7 @@ module RuboCop
52
52
  end
53
53
 
54
54
  def offense_range(node, map_method)
55
- range_between(node.loc.selector.begin_pos, map_method.loc.expression.end_pos)
55
+ range_between(node.loc.selector.begin_pos, map_method.source_range.end_pos)
56
56
  end
57
57
  end
58
58
  end
@@ -48,7 +48,7 @@ module RuboCop
48
48
  string_literal = to_string_literal(replace_str)
49
49
  new_code = "#{receiver.source}.#{good_method}(#{string_literal})"
50
50
 
51
- corrector.replace(node.source_range, new_code)
51
+ corrector.replace(node, new_code)
52
52
  end
53
53
  end
54
54
  end
@@ -69,7 +69,7 @@ module RuboCop
69
69
 
70
70
  new_source = "#{receiver.source}.start_with?(#{to_string_literal(regex_str)})"
71
71
 
72
- corrector.replace(node.source_range, new_source)
72
+ corrector.replace(node, new_source)
73
73
  end
74
74
  end
75
75
  alias on_match_with_lvasgn on_send
@@ -27,28 +27,33 @@ module RuboCop
27
27
 
28
28
  MSG = 'Use `%<symbol_arg>s` instead of `%<string_arg>s`.'
29
29
 
30
+ COMMAND_METHODS = %i[
31
+ alias_method attr_accessor attr_reader attr_writer autoload autoload? private private_constant
32
+ protected public public_constant module_function
33
+ ].freeze
34
+
30
35
  # NOTE: `attr` method is not included in this list as it can cause false positives in Nokogiri API.
31
36
  # And `attr` may not be used because `Style/Attr` registers an offense.
32
37
  # https://github.com/rubocop/rubocop-performance/issues/278
33
- RESTRICT_ON_SEND = %i[
34
- alias_method attr_accessor attr_reader attr_writer autoload autoload?
38
+ RESTRICT_ON_SEND = (%i[
35
39
  class_variable_defined? const_defined? const_get const_set const_source_location
36
40
  define_method instance_method method_defined? private_class_method? private_method_defined?
37
41
  protected_method_defined? public_class_method public_instance_method public_method_defined?
38
42
  remove_class_variable remove_method undef_method class_variable_get class_variable_set
39
- deprecate_constant module_function private private_constant protected public public_constant
40
- remove_const ruby2_keywords
41
- define_singleton_method instance_variable_defined? instance_variable_get instance_variable_set
42
- method public_method public_send remove_instance_variable respond_to? send singleton_method
43
- __send__
44
- ].freeze
43
+ deprecate_constant remove_const ruby2_keywords define_singleton_method instance_variable_defined?
44
+ instance_variable_get instance_variable_set method public_method public_send remove_instance_variable
45
+ respond_to? send singleton_method __send__
46
+ ] + COMMAND_METHODS).freeze
45
47
 
46
48
  def on_send(node)
49
+ return if COMMAND_METHODS.include?(node.method_name) && node.receiver
47
50
  return unless (first_argument = node.first_argument)
48
51
  return unless first_argument.str_type?
49
- return if first_argument.value.include?(' ') || first_argument.value.include?('::')
50
52
 
51
- replacement = first_argument.value.to_sym.inspect
53
+ first_argument_value = first_argument.value
54
+ return if first_argument_value.include?(' ') || first_argument_value.include?('::')
55
+
56
+ replacement = first_argument_value.to_sym.inspect
52
57
 
53
58
  message = format(MSG, symbol_arg: replacement, string_arg: first_argument.source)
54
59
 
@@ -43,7 +43,7 @@ module RuboCop
43
43
 
44
44
  new_source = "#{'!' if negation}#{receiver.source}.include?(#{to_string_literal(regex_str)})"
45
45
 
46
- corrector.replace(node.source_range, new_source)
46
+ corrector.replace(node, new_source)
47
47
  end
48
48
  end
49
49
  alias on_match_with_lvasgn on_send
@@ -70,7 +70,7 @@ module RuboCop
70
70
  replacement_method = replacement_method(node, first_source, second_source)
71
71
 
72
72
  corrector.replace(node.loc.selector, replacement_method)
73
- corrector.replace(first_param.source_range, to_string_literal(first_source)) unless first_param.str_type?
73
+ corrector.replace(first_param, to_string_literal(first_source)) unless first_param.str_type?
74
74
 
75
75
  remove_second_param(corrector, node, first_param) if second_source.empty? && first_source.length == 1
76
76
  end
@@ -183,7 +183,7 @@ module RuboCop
183
183
  end
184
184
 
185
185
  def sum_method_range(node)
186
- range_between(node.loc.selector.begin_pos, node.loc.expression.end_pos)
186
+ range_between(node.loc.selector.begin_pos, node.source_range.end_pos)
187
187
  end
188
188
 
189
189
  def sum_map_range(map, sum)
@@ -52,7 +52,7 @@ module RuboCop
52
52
  add_offense(node, message: message(map_or_collect, count)) do |corrector|
53
53
  replacement = "Array.new(#{count.source}#{map_or_collect.arguments.map { |arg| ", #{arg.source}" }.join})"
54
54
 
55
- corrector.replace(map_or_collect.loc.expression, replacement)
55
+ corrector.replace(map_or_collect, replacement)
56
56
  end
57
57
  end
58
58
  end
@@ -30,7 +30,7 @@ module RuboCop
30
30
  message = format(MSG, double_colon: double_colon)
31
31
 
32
32
  add_offense(node, message: message) do |corrector|
33
- corrector.replace(node.loc.expression, "#{double_colon}URI::DEFAULT_PARSER")
33
+ corrector.replace(node, "#{double_colon}URI::DEFAULT_PARSER")
34
34
  end
35
35
  end
36
36
  end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Performance
5
5
  # This module holds the RuboCop Performance version information.
6
6
  module Version
7
- STRING = '1.16.0'
7
+ STRING = '1.17.0'
8
8
 
9
9
  def self.document_version
10
10
  STRING.match('\d+\.\d+').to_s
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-performance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.0
4
+ version: 1.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-02-06 00:00:00.000000000 Z
13
+ date: 2023-04-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -123,7 +123,7 @@ metadata:
123
123
  homepage_uri: https://docs.rubocop.org/rubocop-performance/
124
124
  changelog_uri: https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md
125
125
  source_code_uri: https://github.com/rubocop/rubocop-performance/
126
- documentation_uri: https://docs.rubocop.org/rubocop-performance/1.16/
126
+ documentation_uri: https://docs.rubocop.org/rubocop-performance/1.17/
127
127
  bug_tracker_uri: https://github.com/rubocop/rubocop-performance/issues
128
128
  rubygems_mfa_required: 'true'
129
129
  post_install_message:
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0'
143
143
  requirements: []
144
- rubygems_version: 3.3.26
144
+ rubygems_version: 3.4.6
145
145
  signing_key:
146
146
  specification_version: 4
147
147
  summary: Automatic performance checking tool for Ruby code.