rubocop-performance 1.22.1 → 1.23.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f39eb7cfffa29b6374302e0fae0b46f55a1ccce24798fa2609c4f80c3dea277
4
- data.tar.gz: 87b1a993f80ae214d981e95cc5a7645f4ea92dca4255f64fa53ec29f5959500e
3
+ metadata.gz: 332ca643753a81ff66c4a6050117f7a479bd3aaa3f186c361a596d06b16aa9b5
4
+ data.tar.gz: 2fb149f85f986d9d0302e6fbe4c7389f312bb93a15a93cec49ffd74495853c78
5
5
  SHA512:
6
- metadata.gz: 99a4776f28e154fe3017ed3e97be8b9121a262e8f40af1aed8d4085fc5ba4e1be7499ea12fe3d76e6858ac45ff88e031dfce6dc129743b52d5fd5815da596775
7
- data.tar.gz: 9160234e8fcdf23f550d41d6429910e09276806f40ec494331d52e5f8480b2d066ac8ede04bc0144c8dc9e9e3a2fce16a8b64746e9ed0c794c278e3426d76a7b
6
+ metadata.gz: e03b8e178f4cde75ef5d82aa7483da512f2816afd82c97b414a4bfcd7afacf589ebb033d6bed40d0968217ec0ff24cb69e2a6c4f28a52ecbdb31cef5599e5386
7
+ data.tar.gz: 410a72e5e85fe6cdc8002b51c8b185dc4d2a1dea5f3a5889c146364c2a20b5b50256c2a90fef59604137dd75d83f20c17ec65991eac6b8dab15e046184e1f006
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012-23 Bozhidar Batsov
1
+ Copyright (c) 2012-25 Bozhidar Batsov
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
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
@@ -18,14 +18,14 @@ module RuboCop
18
18
  #
19
19
  # [source,ruby]
20
20
  # ----
21
- # `Model.where(id: [1, 2, 3]).select { |m| m.method == true }.size`
21
+ # Model.where(id: [1, 2, 3]).select { |m| m.method == true }.size
22
22
  # ----
23
23
  #
24
24
  # becomes:
25
25
  #
26
26
  # [source,ruby]
27
27
  # ----
28
- # `Model.where(id: [1, 2, 3]).to_a.count { |m| m.method == true }`
28
+ # Model.where(id: [1, 2, 3]).to_a.count { |m| m.method == true }
29
29
  # ----
30
30
  #
31
31
  # @example
@@ -72,7 +72,7 @@ module RuboCop
72
72
 
73
73
  def requires_parentheses?(arg)
74
74
  return true if arg.if_type? && arg.ternary?
75
- return true if arg.and_type? || arg.or_type? || arg.range_type?
75
+ return true if arg.operator_keyword? || arg.range_type?
76
76
 
77
77
  call_like?(arg) && requires_parentheses_for_call_like?(arg)
78
78
  end
@@ -48,7 +48,7 @@ module RuboCop
48
48
  RESTRICT_ON_SEND = %i[[] slice first last take length size empty?].freeze
49
49
 
50
50
  def_node_matcher :redundant_chars_call?, <<~PATTERN
51
- (send $(send _ :chars) $_ $...)
51
+ (send $(send !nil? :chars) $_ $...)
52
52
  PATTERN
53
53
 
54
54
  def on_send(node)
@@ -46,7 +46,11 @@ module RuboCop
46
46
  message = format(MSG, current: bad_method, prefer: good_method)
47
47
 
48
48
  add_offense(node.loc.selector, message: message) do |corrector|
49
- string_literal = to_string_literal(replace_str)
49
+ # FIXME: When requiring only RuboCop 1.70.0 and above,
50
+ # `dup` in `replace_str.dup` becomes unnecessary, as
51
+ # frozen strings are handled in the `to_string_literal`
52
+ # implementation. Please remove it.
53
+ string_literal = to_string_literal(replace_str.dup)
50
54
  new_code = "#{receiver.source}#{node.loc.dot.source}#{good_method}(#{string_literal})"
51
55
 
52
56
  corrector.replace(node, new_code)
@@ -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.1'
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.1
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: 2025-01-04 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.1
153
151
  specification_version: 4
154
152
  summary: Automatic performance checking tool for Ruby code.
155
153
  test_files: []