rubocop-performance 1.21.1 → 1.22.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: dd286ebd5cb0d982f759a355a86281898577db559004bef9bfb53b8493a32934
4
- data.tar.gz: f3e101a14918c3efa6dc657841471b22afec47d54ce70442567d54ffc3ee8ed5
3
+ metadata.gz: 786f01d21be4d9f083fc007c02f4138145970d85b68776aca83fc305bd4f5152
4
+ data.tar.gz: b15886f0f524d72de2319644d88a46058fe056476a52eef78eca7349e4e142eb
5
5
  SHA512:
6
- metadata.gz: 1d6df8e36cbb224d892f14e7fb1eeccf34c887c9fd6e9ad302889ab71b64e48db3c3167291f210ad7e69a23f5e4720ae23ee767c4a569701d09e8fa771ede28c
7
- data.tar.gz: 428da3a79195bcf8c715a1962c5bea38a08ee2973c0450b78fc24ceeb376a4f984b3d4f91efba93c799d28986dda22f711e90937738007abbd41b470a484a887
6
+ metadata.gz: 940f52f35280335d6417096c43344e9d582fa22e9a09e7dd60cd08f19f1c68740052a2810dc9d082e5ee66b56c6c631eeb2cc1ee45ccd896bd58d654fdd4b523
7
+ data.tar.gz: 483d5eedb23cc666c15d5c4bdb6b30f0c7b001547d38406c89ecf18547e0a0ae6c73fa9795f00b260921787b4ffee1c4d628434394c587d7744253759071a2b0
data/config/default.yml CHANGED
@@ -32,8 +32,11 @@ Performance/BindCall:
32
32
 
33
33
  Performance/BlockGivenWithExplicitBlock:
34
34
  Description: 'Check block argument explicitly instead of using `block_given?`.'
35
- Enabled: pending
35
+ # This cop was created due to a mistake in microbenchmark.
36
+ # https://github.com/rubocop/rubocop-performance/issues/385
37
+ Enabled: false
36
38
  VersionAdded: '1.9'
39
+ VersionChanged: '1.22'
37
40
 
38
41
  Performance/Caller:
39
42
  Description: >-
@@ -3,45 +3,48 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Performance
6
- # Identifies places where numeric argument to BigDecimal should be
7
- # converted to string. Initializing from String is faster
8
- # than from Numeric for BigDecimal.
6
+ # Identifies places where string argument to `BigDecimal` should be
7
+ # converted to numeric. Initializing from Integer is faster
8
+ # than from String for BigDecimal.
9
9
  #
10
10
  # @example
11
11
  # # bad
12
- # BigDecimal(1, 2)
13
- # 4.to_d(6)
14
- # BigDecimal(1.2, 3, exception: true)
15
- # 4.5.to_d(6, exception: true)
16
- #
17
- # # good
18
12
  # BigDecimal('1', 2)
19
13
  # BigDecimal('4', 6)
20
14
  # BigDecimal('1.2', 3, exception: true)
21
15
  # BigDecimal('4.5', 6, exception: true)
22
16
  #
17
+ # # good
18
+ # BigDecimal(1, 2)
19
+ # 4.to_d(6)
20
+ # BigDecimal(1.2, 3, exception: true)
21
+ # 4.5.to_d(6, exception: true)
22
+ #
23
23
  class BigDecimalWithNumericArgument < Base
24
24
  extend AutoCorrector
25
+ extend TargetRubyVersion
26
+
27
+ minimum_target_ruby_version 3.1
25
28
 
26
- MSG = 'Convert numeric literal to string and pass it to `BigDecimal`.'
29
+ MSG = 'Convert string literal to numeric and pass it to `BigDecimal`.'
27
30
  RESTRICT_ON_SEND = %i[BigDecimal to_d].freeze
28
31
 
29
32
  def_node_matcher :big_decimal_with_numeric_argument?, <<~PATTERN
30
- (send nil? :BigDecimal $numeric_type? ...)
33
+ (send nil? :BigDecimal $str_type? ...)
31
34
  PATTERN
32
35
 
33
36
  def_node_matcher :to_d?, <<~PATTERN
34
- (send [!nil? $numeric_type?] :to_d ...)
37
+ (send [!nil? $str_type?] :to_d ...)
35
38
  PATTERN
36
39
 
37
40
  def on_send(node)
38
- if (numeric = big_decimal_with_numeric_argument?(node))
39
- add_offense(numeric.source_range) do |corrector|
40
- corrector.wrap(numeric, "'", "'")
41
+ if (string = big_decimal_with_numeric_argument?(node))
42
+ add_offense(string.source_range) do |corrector|
43
+ corrector.replace(string, string.value)
41
44
  end
42
- elsif (numeric_to_d = to_d?(node))
43
- add_offense(numeric_to_d.source_range) do |corrector|
44
- big_decimal_args = node.arguments.map(&:source).unshift("'#{numeric_to_d.source}'").join(', ')
45
+ elsif (string_to_d = to_d?(node))
46
+ add_offense(string_to_d.source_range) do |corrector|
47
+ big_decimal_args = node.arguments.map(&:source).unshift(string_to_d.value).join(', ')
45
48
 
46
49
  corrector.replace(node, "BigDecimal(#{big_decimal_args})")
47
50
  end
@@ -6,6 +6,9 @@ module RuboCop
6
6
  # Identifies unnecessary use of a `block_given?` where explicit check
7
7
  # of block argument would suffice.
8
8
  #
9
+ # NOTE: This cop produces code with significantly worse performance when a
10
+ # block is being passed to the method and as such should not be enabled.
11
+ #
9
12
  # @example
10
13
  # # bad
11
14
  # def method(&block)
@@ -41,7 +41,7 @@ module RuboCop
41
41
  class DoubleStartEndWith < Base
42
42
  extend AutoCorrector
43
43
 
44
- MSG = 'Use `%<receiver>s.%<method>s(%<combined_args>s)` instead of `%<original_code>s`.'
44
+ MSG = 'Use `%<replacement>s` instead of `%<original_code>s`.'
45
45
 
46
46
  def on_or(node)
47
47
  receiver, method, first_call_args, second_call_args = process_source(node)
@@ -50,7 +50,7 @@ module RuboCop
50
50
 
51
51
  combined_args = combine_args(first_call_args, second_call_args)
52
52
 
53
- add_offense(node, message: message(node, receiver, method, combined_args)) do |corrector|
53
+ add_offense(node, message: message(node, receiver, first_call_args, method, combined_args)) do |corrector|
54
54
  autocorrect(corrector, first_call_args, second_call_args, combined_args)
55
55
  end
56
56
  end
@@ -73,10 +73,10 @@ module RuboCop
73
73
  end
74
74
  end
75
75
 
76
- def message(node, receiver, method, combined_args)
77
- format(
78
- MSG, receiver: receiver.source, method: method, combined_args: combined_args, original_code: node.source
79
- )
76
+ def message(node, receiver, first_call_args, method, combined_args)
77
+ dot = first_call_args.first.parent.send_type? ? '.' : '&.'
78
+ replacement = "#{receiver.source}#{dot}#{method}(#{combined_args})"
79
+ format(MSG, replacement: replacement, original_code: node.source)
80
80
  end
81
81
 
82
82
  def combine_args(first_call_args, second_call_args)
@@ -89,16 +89,16 @@ module RuboCop
89
89
 
90
90
  def_node_matcher :two_start_end_with_calls, <<~PATTERN
91
91
  (or
92
- (send $_recv [{:start_with? :end_with?} $_method] $...)
93
- (send _recv _method $...))
92
+ (call $_recv [{:start_with? :end_with?} $_method] $...)
93
+ (call _recv _method $...))
94
94
  PATTERN
95
95
 
96
96
  def_node_matcher :check_with_active_support_aliases, <<~PATTERN
97
97
  (or
98
- (send $_recv
98
+ (call $_recv
99
99
  [{:start_with? :starts_with? :end_with? :ends_with?} $_method]
100
100
  $...)
101
- (send _recv _method $...))
101
+ (call _recv _method $...))
102
102
  PATTERN
103
103
  end
104
104
  end
@@ -130,9 +130,7 @@ module RuboCop
130
130
  end
131
131
 
132
132
  def rewrite_with_modifier(node, parent, new_source)
133
- # FIXME: `|| 2` can be removed when support is limited to RuboCop 1.44 or higher.
134
- # https://github.com/rubocop/rubocop/commit/02d1e5b
135
- indent = ' ' * (configured_indentation_width || 2)
133
+ indent = ' ' * configured_indentation_width
136
134
  padding = "\n#{indent + leading_spaces(node)}"
137
135
  new_source.gsub!("\n", padding)
138
136
 
@@ -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.21.1'
7
+ STRING = '1.22.0'
8
8
 
9
9
  def self.document_version
10
10
  STRING.match('\d+\.\d+').to_s
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-performance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.21.1
4
+ version: 1.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
8
8
  - Jonas Arvidsson
9
9
  - Yuji Nakayama
10
+ autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2024-06-16 00:00:00.000000000 Z
13
+ date: 2024-09-16 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rubocop
@@ -129,9 +130,10 @@ metadata:
129
130
  homepage_uri: https://docs.rubocop.org/rubocop-performance/
130
131
  changelog_uri: https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md
131
132
  source_code_uri: https://github.com/rubocop/rubocop-performance/
132
- documentation_uri: https://docs.rubocop.org/rubocop-performance/1.21/
133
+ documentation_uri: https://docs.rubocop.org/rubocop-performance/1.22/
133
134
  bug_tracker_uri: https://github.com/rubocop/rubocop-performance/issues
134
135
  rubygems_mfa_required: 'true'
136
+ post_install_message:
135
137
  rdoc_options: []
136
138
  require_paths:
137
139
  - lib
@@ -146,7 +148,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
148
  - !ruby/object:Gem::Version
147
149
  version: '0'
148
150
  requirements: []
149
- rubygems_version: 3.6.0.dev
151
+ rubygems_version: 3.2.33
152
+ signing_key:
150
153
  specification_version: 4
151
154
  summary: Automatic performance checking tool for Ruby code.
152
155
  test_files: []