rubocop-performance 1.22.1 → 1.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f39eb7cfffa29b6374302e0fae0b46f55a1ccce24798fa2609c4f80c3dea277
4
- data.tar.gz: 87b1a993f80ae214d981e95cc5a7645f4ea92dca4255f64fa53ec29f5959500e
3
+ metadata.gz: 40d68e8bad13725b44f9a32555e63071765f0d4720439aba66f8b1c2ae61d803
4
+ data.tar.gz: 02f248b67961365ac64c7f5f99337d03d7a5dc9d57e36dd9ddccd3d2a16b75fb
5
5
  SHA512:
6
- metadata.gz: 99a4776f28e154fe3017ed3e97be8b9121a262e8f40af1aed8d4085fc5ba4e1be7499ea12fe3d76e6858ac45ff88e031dfce6dc129743b52d5fd5815da596775
7
- data.tar.gz: 9160234e8fcdf23f550d41d6429910e09276806f40ec494331d52e5f8480b2d066ac8ede04bc0144c8dc9e9e3a2fce16a8b64746e9ed0c794c278e3426d76a7b
6
+ metadata.gz: 0bc99f145e03f6942e915b3edb51280821f66118d86d3b41bc87bc02ca4225ab8696510b7e77575fc2f05601cdc571a207b7d3c9eddc93e7ad238bc606ce3746
7
+ data.tar.gz: 91b71a5204257159d636b44dc003f2cc1c2b2bc6f67a17d9054bcdef2921926e3e5b729191107422abe807ac9628d3efa9db9550866233e07a88fb67f4d252b6
data/config/default.yml CHANGED
@@ -326,6 +326,12 @@ Performance/StartWith:
326
326
  VersionAdded: '0.36'
327
327
  VersionChanged: '1.10'
328
328
 
329
+ Performance/StringBytesize:
330
+ Description: "Use `String#bytesize` instead of calculating the size of the bytes array."
331
+ Safe: false
332
+ Enabled: 'pending'
333
+ VersionAdded: '1.23'
334
+
329
335
  Performance/StringIdentifierArgument:
330
336
  Description: 'Use symbol identifier argument instead of string identifier argument.'
331
337
  Enabled: pending
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Performance
6
+ # Checks for calls to `#bytes` counting method and suggests using `bytesize` instead.
7
+ # The `bytesize` method is more efficient and directly returns the size in bytes,
8
+ # avoiding the intermediate array allocation that `bytes.size` incurs.
9
+ #
10
+ # @safety
11
+ # This cop is unsafe because it assumes that the receiver
12
+ # responds to `#bytesize` method.
13
+ #
14
+ # @example
15
+ # # bad
16
+ # string_var.bytes.count
17
+ # "foobar".bytes.size
18
+ #
19
+ # # good
20
+ # string_var.bytesize
21
+ # "foobar".bytesize
22
+ class StringBytesize < Base
23
+ extend AutoCorrector
24
+
25
+ MSG = 'Use `String#bytesize` instead of calculating the size of the bytes array.'
26
+ RESTRICT_ON_SEND = %i[size length count].freeze
27
+
28
+ def_node_matcher :string_bytes_method?, <<~MATCHER
29
+ (call (call !{nil? int} :bytes) {:size :length :count})
30
+ MATCHER
31
+
32
+ def on_send(node)
33
+ string_bytes_method?(node) do
34
+ range = node.receiver.loc.selector.begin.join(node.source_range.end)
35
+
36
+ add_offense(range) do |corrector|
37
+ corrector.replace(range, 'bytesize')
38
+ end
39
+ end
40
+ end
41
+ alias on_csend on_send
42
+ end
43
+ end
44
+ end
45
+ end
@@ -159,7 +159,7 @@ module RuboCop
159
159
 
160
160
  def array_literal?(node)
161
161
  receiver = node.children.first
162
- receiver&.literal? && receiver&.array_type?
162
+ receiver&.literal? && receiver.array_type?
163
163
  end
164
164
 
165
165
  def autocorrect(corrector, init, range)
@@ -44,6 +44,7 @@ require_relative 'performance/select_map'
44
44
  require_relative 'performance/size'
45
45
  require_relative 'performance/sort_reverse'
46
46
  require_relative 'performance/squeeze'
47
+ require_relative 'performance/string_bytesize'
47
48
  require_relative 'performance/start_with'
48
49
  require_relative 'performance/string_identifier_argument'
49
50
  require_relative 'performance/string_include'
@@ -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.22.1'
7
+ STRING = '1.23.0'
8
8
 
9
9
  def self.document_version
10
10
  STRING.match('\d+\.\d+').to_s
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-performance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.22.1
4
+ version: 1.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
8
8
  - Jonas Arvidsson
9
9
  - Yuji Nakayama
10
- autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2024-09-17 00:00:00.000000000 Z
12
+ date: 2024-11-14 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rubocop
@@ -112,6 +111,7 @@ files:
112
111
  - lib/rubocop/cop/performance/sort_reverse.rb
113
112
  - lib/rubocop/cop/performance/squeeze.rb
114
113
  - lib/rubocop/cop/performance/start_with.rb
114
+ - lib/rubocop/cop/performance/string_bytesize.rb
115
115
  - lib/rubocop/cop/performance/string_identifier_argument.rb
116
116
  - lib/rubocop/cop/performance/string_include.rb
117
117
  - lib/rubocop/cop/performance/string_replacement.rb
@@ -130,10 +130,9 @@ 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.22/
133
+ documentation_uri: https://docs.rubocop.org/rubocop-performance/1.23/
134
134
  bug_tracker_uri: https://github.com/rubocop/rubocop-performance/issues
135
135
  rubygems_mfa_required: 'true'
136
- post_install_message:
137
136
  rdoc_options: []
138
137
  require_paths:
139
138
  - lib
@@ -148,8 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
147
  - !ruby/object:Gem::Version
149
148
  version: '0'
150
149
  requirements: []
151
- rubygems_version: 3.2.33
152
- signing_key:
150
+ rubygems_version: 3.6.0.dev
153
151
  specification_version: 4
154
152
  summary: Automatic performance checking tool for Ruby code.
155
153
  test_files: []