rubocop-performance 1.20.2 → 1.21.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1dad3fdab16d4dbcb3047e3319ab415b6e9ae3e2cbf14a73a1874831bf473701
4
- data.tar.gz: ca98aec2aac71f768e63c5b5ed3c73c2a5ef8242433fc8fe078e9930f47a4d38
3
+ metadata.gz: c00ee718f283199f3c4f53b54071998b356f7239edcd3c84015bac94ad1b05dc
4
+ data.tar.gz: a5e7d011cd090fd5d30eb0ef9e12acabb93a993cc3acb46129da46c37294e1ba
5
5
  SHA512:
6
- metadata.gz: 16536c625e9f66d73368d70153a139f72da96dee225807c1154c07e7a2df999be9f06278b1c6db95836baa6832524da39715f8240151236c5b29ec47ce99e91b
7
- data.tar.gz: bfd72acdc38b7337c4b783fc8e5e14516aa8926980cfbf2051487350eb939648ac9af302e1f5c0abc889f3564efb98ff5a7551d107d8d28b2912c4c9a0128b79
6
+ metadata.gz: 711efd2eae8c54dc1b567e198360038fb16eee00c2e6a61db7dbcfb063f219618e36809ac5679cc531e8fe84245ea1f66e6e8eb9fbed5cbb9dcc22f57c10dab6
7
+ data.tar.gz: 5618f678392ffb6f93b34388e3ef060c017f7e70b53d992ebe48d2bb49b7ec5570adc7b21f5f22f0511cddc4fb1dead044904d7bcf40949191ee6ed8b884565f
data/config/default.yml CHANGED
@@ -55,9 +55,10 @@ Performance/Casecmp:
55
55
  Description: >-
56
56
  Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`..
57
57
  Reference: 'https://github.com/fastruby/fast-ruby#stringcasecmp-vs--stringcasecmp-vs-stringdowncase---code'
58
- Enabled: true
58
+ Enabled: false
59
59
  Safe: false
60
60
  VersionAdded: '0.36'
61
+ VersionChanged: '1.21'
61
62
 
62
63
  Performance/ChainArrayAllocation:
63
64
  Description: >-
@@ -6,6 +6,12 @@ module RuboCop
6
6
  # Identifies places where a case-insensitive string comparison
7
7
  # can better be implemented using `casecmp`.
8
8
  #
9
+ # This cop is disabled by default because `String#casecmp` only works with
10
+ # ASCII characters. See https://github.com/rubocop/rubocop/issues/9753.
11
+ #
12
+ # If you are working only with ASCII characters, then this cop can be
13
+ # safely enabled.
14
+ #
9
15
  # @safety
10
16
  # This cop is unsafe because `String#casecmp` and `String#casecmp?` behave
11
17
  # differently when using Non-ASCII characters.
@@ -19,8 +19,6 @@ module RuboCop
19
19
  # array.map! { |x| x.downcase }
20
20
  # array
21
21
  class ChainArrayAllocation < Base
22
- include RangeHelp
23
-
24
22
  # These methods return a new array but only sometimes. They must be
25
23
  # called with an argument. For example:
26
24
  #
@@ -54,7 +52,7 @@ module RuboCop
54
52
  def_node_matcher :chain_array_allocation?, <<~PATTERN
55
53
  (send {
56
54
  (send _ $%RETURN_NEW_ARRAY_WHEN_ARGS {int lvar ivar cvar gvar send})
57
- (block (send _ $%ALWAYS_RETURNS_NEW_ARRAY) ...)
55
+ ({block numblock} (send _ $%ALWAYS_RETURNS_NEW_ARRAY) ...)
58
56
  (send _ $%RETURNS_NEW_ARRAY ...)
59
57
  } $%HAS_MUTATION_ALTERNATIVE ...)
60
58
  PATTERN
@@ -62,12 +60,21 @@ module RuboCop
62
60
  def on_send(node)
63
61
  chain_array_allocation?(node) do |fm, sm|
64
62
  return if node.each_descendant(:send).any? { |descendant| descendant.method?(:lazy) }
63
+ return if node.method?(:select) && !enumerable_select_method?(node.receiver)
65
64
 
66
- range = range_between(node.loc.dot.begin_pos, node.source_range.end_pos)
65
+ range = node.loc.selector.begin.join(node.source_range.end)
67
66
 
68
67
  add_offense(range, message: format(MSG, method: fm, second_method: sm))
69
68
  end
70
69
  end
70
+
71
+ private
72
+
73
+ def enumerable_select_method?(node)
74
+ # NOTE: `QueryMethods#select` in Rails accepts positional arguments, whereas `Enumerable#select` does not.
75
+ # This difference can be utilized to reduce the knowledge requirements related to `select`.
76
+ (node.block_type? || node.numblock_type?) && node.send_node.arguments.empty?
77
+ end
71
78
  end
72
79
  end
73
80
  end
@@ -56,7 +56,8 @@ module RuboCop
56
56
  def_node_matcher :redundant_regex?, <<~PATTERN
57
57
  {(call $!nil? {:match :=~ :match?} (regexp (str $#literal_at_end?) (regopt)))
58
58
  (send (regexp (str $#literal_at_end?) (regopt)) {:match :match?} $_)
59
- (match-with-lvasgn (regexp (str $#literal_at_end?) (regopt)) $_)}
59
+ ({send match-with-lvasgn} (regexp (str $#literal_at_end?) (regopt)) $_)
60
+ (send (regexp (str $#literal_at_end?) (regopt)) :=~ $_)}
60
61
  PATTERN
61
62
 
62
63
  def on_send(node)
@@ -49,6 +49,8 @@ module RuboCop
49
49
  next unless body
50
50
 
51
51
  calls_to_report(argname, body).each do |blockcall|
52
+ next if blockcall.block_literal?
53
+
52
54
  add_offense(blockcall, message: format(MSG, argname: argname)) do |corrector|
53
55
  autocorrect(corrector, blockcall)
54
56
  end
@@ -248,7 +248,7 @@ module RuboCop
248
248
  end
249
249
 
250
250
  def correct_operator(corrector, recv, arg, oper = nil)
251
- op_range = correction_range(recv, arg)
251
+ op_range = recv.source_range.end.join(arg.source_range.begin)
252
252
 
253
253
  replace_with_match_predicate_method(corrector, recv, arg, op_range)
254
254
 
@@ -271,13 +271,6 @@ module RuboCop
271
271
  corrector.replace(recv, arg.source)
272
272
  corrector.replace(arg, recv.source)
273
273
  end
274
-
275
- def correction_range(recv, arg)
276
- buffer = processed_source.buffer
277
- op_begin_pos = recv.source_range.end_pos
278
- op_end_pos = arg.source_range.begin_pos
279
- Parser::Source::Range.new(buffer, op_begin_pos, op_end_pos)
280
- end
281
274
  end
282
275
  end
283
276
  end
@@ -56,7 +56,8 @@ module RuboCop
56
56
  def_node_matcher :redundant_regex?, <<~PATTERN
57
57
  {(call $!nil? {:match :=~ :match?} (regexp (str $#literal_at_start?) (regopt)))
58
58
  (send (regexp (str $#literal_at_start?) (regopt)) {:match :match?} $_)
59
- (match-with-lvasgn (regexp (str $#literal_at_start?) (regopt)) $_)}
59
+ (match-with-lvasgn (regexp (str $#literal_at_start?) (regopt)) $_)
60
+ (send (regexp (str $#literal_at_start?) (regopt)) :=~ $_)}
60
61
  PATTERN
61
62
 
62
63
  def on_send(node)
@@ -29,7 +29,8 @@ module RuboCop
29
29
  def_node_matcher :redundant_regex?, <<~PATTERN
30
30
  {(call $!nil? {:match :=~ :!~ :match?} (regexp (str $#literal?) (regopt)))
31
31
  (send (regexp (str $#literal?) (regopt)) {:match :match? :===} $_)
32
- (match-with-lvasgn (regexp (str $#literal?) (regopt)) $_)}
32
+ (match-with-lvasgn (regexp (str $#literal?) (regopt)) $_)
33
+ (send (regexp (str $#literal?) (regopt)) :=~ $_)}
33
34
  PATTERN
34
35
 
35
36
  # rubocop:disable Metrics/AbcSize
@@ -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.20.2'
7
+ STRING = '1.21.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.20.2
4
+ version: 1.21.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: 2024-01-08 00:00:00.000000000 Z
13
+ date: 2024-03-30 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -38,7 +38,7 @@ dependencies:
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 1.30.0
41
+ version: 1.31.1
42
42
  - - "<"
43
43
  - !ruby/object:Gem::Version
44
44
  version: '2.0'
@@ -48,7 +48,7 @@ dependencies:
48
48
  requirements:
49
49
  - - ">="
50
50
  - !ruby/object:Gem::Version
51
- version: 1.30.0
51
+ version: 1.31.1
52
52
  - - "<"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.0'
@@ -130,7 +130,7 @@ metadata:
130
130
  homepage_uri: https://docs.rubocop.org/rubocop-performance/
131
131
  changelog_uri: https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md
132
132
  source_code_uri: https://github.com/rubocop/rubocop-performance/
133
- documentation_uri: https://docs.rubocop.org/rubocop-performance/1.20/
133
+ documentation_uri: https://docs.rubocop.org/rubocop-performance/1.21/
134
134
  bug_tracker_uri: https://github.com/rubocop/rubocop-performance/issues
135
135
  rubygems_mfa_required: 'true'
136
136
  post_install_message:
@@ -148,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
148
  - !ruby/object:Gem::Version
149
149
  version: '0'
150
150
  requirements: []
151
- rubygems_version: 3.1.6
151
+ rubygems_version: 3.5.3
152
152
  signing_key:
153
153
  specification_version: 4
154
154
  summary: Automatic performance checking tool for Ruby code.