rubocop-performance 1.21.1 → 1.22.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: 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: []