rubocop-performance 1.20.1 → 1.20.2

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: 1687f31268dd621e7a4e82fb11b5ae6927f208936df7b7136b5a80a1d4cfe547
4
- data.tar.gz: f8bf3aaa6084017f9aa368440e57f3e752f203d801132b8cad848634dd5ecb3d
3
+ metadata.gz: 1dad3fdab16d4dbcb3047e3319ab415b6e9ae3e2cbf14a73a1874831bf473701
4
+ data.tar.gz: ca98aec2aac71f768e63c5b5ed3c73c2a5ef8242433fc8fe078e9930f47a4d38
5
5
  SHA512:
6
- metadata.gz: 7d5e072526c9a1ef7f5636b24845ec09b83548a1e06cf6b12b6b5cabdf4524d536dbc06e3e007f344a2584a6014d29ae19f29be80574a730b88b961d7f33d358
7
- data.tar.gz: f10756696005feffe81f9bd471f52f11d69ac193036f65bffe5be7e4d1bb0a95990ccfa9a6278b2128377efc4d2097a74e5b8f896f56ac7c12856f78b9447a83
6
+ metadata.gz: 16536c625e9f66d73368d70153a139f72da96dee225807c1154c07e7a2df999be9f06278b1c6db95836baa6832524da39715f8240151236c5b29ec47ce99e91b
7
+ data.tar.gz: bfd72acdc38b7337c4b783fc8e5e14516aa8926980cfbf2051487350eb939648ac9af302e1f5c0abc889f3564efb98ff5a7551d107d8d28b2912c4c9a0128b79
@@ -16,13 +16,19 @@ module RuboCop
16
16
  # send('do_something')
17
17
  # attr_accessor 'do_something'
18
18
  # instance_variable_get('@ivar')
19
- # const_get("string_#{interpolation}")
19
+ # respond_to?("string_#{interpolation}")
20
20
  #
21
21
  # # good
22
22
  # send(:do_something)
23
23
  # attr_accessor :do_something
24
24
  # instance_variable_get(:@ivar)
25
- # const_get(:"string_#{interpolation}")
25
+ # respond_to?(:"string_#{interpolation}")
26
+ #
27
+ # # good - these methods don't support namespaced symbols
28
+ # const_get("#{module_path}::Base")
29
+ # const_source_location("#{module_path}::Base")
30
+ # const_defined?("#{module_path}::Base")
31
+ #
26
32
  #
27
33
  class StringIdentifierArgument < Base
28
34
  extend AutoCorrector
@@ -34,6 +40,8 @@ module RuboCop
34
40
  protected public public_constant module_function
35
41
  ].freeze
36
42
 
43
+ INTERPOLATION_IGNORE_METHODS = %i[const_get const_source_location const_defined?].freeze
44
+
37
45
  TWO_ARGUMENTS_METHOD = :alias_method
38
46
  MULTIPLE_ARGUMENTS_METHODS = %i[
39
47
  attr_accessor attr_reader attr_writer private private_constant
@@ -44,14 +52,14 @@ module RuboCop
44
52
  # And `attr` may not be used because `Style/Attr` registers an offense.
45
53
  # https://github.com/rubocop/rubocop-performance/issues/278
46
54
  RESTRICT_ON_SEND = (%i[
47
- class_variable_defined? const_defined? const_get const_set const_source_location
55
+ class_variable_defined? const_set
48
56
  define_method instance_method method_defined? private_class_method? private_method_defined?
49
57
  protected_method_defined? public_class_method public_instance_method public_method_defined?
50
58
  remove_class_variable remove_method undef_method class_variable_get class_variable_set
51
59
  deprecate_constant remove_const ruby2_keywords define_singleton_method instance_variable_defined?
52
60
  instance_variable_get instance_variable_set method public_method public_send remove_instance_variable
53
61
  respond_to? send singleton_method __send__
54
- ] + COMMAND_METHODS).freeze
62
+ ] + COMMAND_METHODS + INTERPOLATION_IGNORE_METHODS).freeze
55
63
 
56
64
  def on_send(node)
57
65
  return if COMMAND_METHODS.include?(node.method_name) && node.receiver
@@ -75,9 +83,13 @@ module RuboCop
75
83
  [node.first_argument]
76
84
  end
77
85
 
78
- arguments.compact.filter do |argument|
79
- argument.str_type? || argument.dstr_type?
80
- end
86
+ arguments.compact.filter { |argument| string_argument_compatible?(argument, node) }
87
+ end
88
+
89
+ def string_argument_compatible?(argument, node)
90
+ return true if argument.str_type?
91
+
92
+ argument.dstr_type? && INTERPOLATION_IGNORE_METHODS.none? { |method| node.method?(method) }
81
93
  end
82
94
 
83
95
  def register_offense(argument, argument_value)
@@ -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.1'
7
+ STRING = '1.20.2'
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.1
4
+ version: 1.20.2
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: 2023-12-25 00:00:00.000000000 Z
13
+ date: 2024-01-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop