rubocop-minitest 0.32.1 → 0.33.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: '08c9b3f5ddb92c5f5b813bc30191e4a217e84625fd306708d119fa8214a386d9'
4
- data.tar.gz: 864f4e6170234aea432a9b8d14e7fb940c35aa0acb4297871382f75768e686bc
3
+ metadata.gz: e9952135d079a3cd02bea1c521f30f9a15eca9614caa6730c84d0afce7fca845
4
+ data.tar.gz: a11c62c0872b7abb891151770cc9008e1c43f0e8753b8371b85ba8c47142bd05
5
5
  SHA512:
6
- metadata.gz: c6d46818eda0dfcfb3307e5f5d648ce695fcc9054bda0c59ea61a4f894434a57185facdd8a6d44810515a249487c4007ae9424bcc188686fa2e2e0838792ed65
7
- data.tar.gz: e64bd49fc78e749da4b3e6422387e8bfe8c5ab7c56d9f64376d3b860adfeb2c6a5c1822ead7bbc282527908e7511e90a72a962f77c9cc9adbd31bb6454e8ed2c
6
+ metadata.gz: 16fb13dc153d36bd4479690fc2be96dcfc119e9430271231266ba8b150c79871ce1ee417020c9af9a13c31928ea3afd97f23156c975d17ca1be1e2f9f9937770
7
+ data.tar.gz: f8bd286ee337818358b5e87bb5f375a6d03f2028de3f55481f0a8788013fe4f32314e90985fe967d7a83218dd3c8da0684cdc3b5e998a96f662e644e93c4afd8
@@ -9,14 +9,46 @@ module RuboCop
9
9
  # @example
10
10
  # # bad
11
11
  # assert("rubocop-minitest" == actual)
12
+ # assert_operator("rubocop-minitest", :==, actual)
12
13
  #
13
14
  # # good
14
15
  # assert_equal("rubocop-minitest", actual)
15
16
  #
16
17
  class AssertEqual < Base
17
- extend MinitestCopRule
18
+ include ArgumentRangeHelper
19
+ extend AutoCorrector
18
20
 
19
- define_rule :assert, target_method: :==, preferred_method: :assert_equal
21
+ MSG = 'Prefer using `assert_equal(%<preferred>s)`.'
22
+ RESTRICT_ON_SEND = %i[assert assert_operator].freeze
23
+
24
+ def_node_matcher :assert_equal, <<~PATTERN
25
+ {
26
+ (send nil? :assert (send $_ :== $_) $...)
27
+ (send nil? :assert_operator $_ (sym :==) $_ $...)
28
+ }
29
+ PATTERN
30
+
31
+ # rubocop:disable Metrics/AbcSize
32
+ def on_send(node)
33
+ assert_equal(node) do |expected, actual, rest_args|
34
+ basic_arguments = "#{expected.source}, #{actual.source}"
35
+ preferred = (message_arg = rest_args.first) ? "#{basic_arguments}, #{message_arg.source}" : basic_arguments
36
+ message = format(MSG, preferred: preferred)
37
+
38
+ add_offense(node, message: message) do |corrector|
39
+ corrector.replace(node.loc.selector, 'assert_equal')
40
+
41
+ range = if node.method?(:assert)
42
+ node.first_argument
43
+ else
44
+ node.first_argument.source_range.begin.join(node.arguments[2].source_range.end)
45
+ end
46
+
47
+ corrector.replace(range, basic_arguments)
48
+ end
49
+ end
50
+ end
51
+ # rubocop:enable Metrics/AbcSize
20
52
  end
21
53
  end
22
54
  end
@@ -11,6 +11,7 @@ module RuboCop
11
11
  # assert(matcher.match(string))
12
12
  # assert(matcher.match?(string))
13
13
  # assert(matcher =~ string)
14
+ # assert_operator(matcher, :=~, string)
14
15
  # assert(matcher.match(string), 'message')
15
16
  #
16
17
  # # good
@@ -18,10 +19,50 @@ module RuboCop
18
19
  # assert_match(matcher, string, 'message')
19
20
  #
20
21
  class AssertMatch < Base
21
- extend MinitestCopRule
22
+ include ArgumentRangeHelper
23
+ extend AutoCorrector
22
24
 
23
- define_rule :assert, target_method: %i[match match? =~],
24
- preferred_method: :assert_match, inverse: 'regexp_type?'
25
+ MSG = 'Prefer using `assert_match(%<preferred>s)`.'
26
+ RESTRICT_ON_SEND = %i[assert assert_operator].freeze
27
+
28
+ def_node_matcher :assert_match, <<~PATTERN
29
+ {
30
+ (send nil? :assert (send $_ {:match :match? :=~} $_) $...)
31
+ (send nil? :assert_operator $_ (sym :=~) $_ $...)
32
+ }
33
+ PATTERN
34
+
35
+ # rubocop:disable Metrics/AbcSize
36
+ def on_send(node)
37
+ assert_match(node) do |expected, actual, rest_args|
38
+ basic_arguments = order_expected_and_actual(expected, actual)
39
+ preferred = (message_arg = rest_args.first) ? "#{basic_arguments}, #{message_arg.source}" : basic_arguments
40
+ message = format(MSG, preferred: preferred)
41
+
42
+ add_offense(node, message: message) do |corrector|
43
+ corrector.replace(node.loc.selector, 'assert_match')
44
+
45
+ range = if node.method?(:assert)
46
+ node.first_argument
47
+ else
48
+ node.first_argument.source_range.begin.join(node.arguments[2].source_range.end)
49
+ end
50
+
51
+ corrector.replace(range, basic_arguments)
52
+ end
53
+ end
54
+ end
55
+ # rubocop:enable Metrics/AbcSize
56
+
57
+ private
58
+
59
+ def order_expected_and_actual(expected, actual)
60
+ if actual.regexp_type?
61
+ [actual, expected]
62
+ else
63
+ [expected, actual]
64
+ end.map(&:source).join(', ')
65
+ end
25
66
  end
26
67
  end
27
68
  end
@@ -18,10 +18,14 @@ module RuboCop
18
18
 
19
19
  MSG = 'Prefer using `assert_operator(%<new_arguments>s)`.'
20
20
  RESTRICT_ON_SEND = %i[assert].freeze
21
+ ALLOWED_OPERATORS = [:[]].freeze
21
22
 
22
23
  def on_send(node)
23
24
  first_argument = node.first_argument
24
- return unless first_argument.respond_to?(:operator_method?) && first_argument.operator_method?
25
+ return unless first_argument.respond_to?(:binary_operation?) && first_argument.binary_operation?
26
+
27
+ operator = first_argument.to_a[1]
28
+ return if ALLOWED_OPERATORS.include?(operator)
25
29
 
26
30
  new_arguments = build_new_arguments(node)
27
31
 
@@ -9,6 +9,9 @@ module RuboCop
9
9
  # @example
10
10
  # # bad
11
11
  # assert("rubocop-minitest" != actual)
12
+ # refute("rubocop-minitest" == actual)
13
+ # assert_operator("rubocop-minitest", :!=, actual)
14
+ # refute_operator("rubocop-minitest", :==, actual)
12
15
  #
13
16
  # # good
14
17
  # refute_equal("rubocop-minitest", actual)
@@ -18,45 +21,38 @@ module RuboCop
18
21
  extend AutoCorrector
19
22
 
20
23
  MSG = 'Prefer using `refute_equal(%<preferred>s)`.'
21
- RESTRICT_ON_SEND = %i[assert].freeze
22
-
23
- def_node_matcher :assert_not_equal, <<~PATTERN
24
- (send nil? :assert (send $_ :!= $_) $... )
24
+ RESTRICT_ON_SEND = %i[assert refute assert_operator refute_operator].freeze
25
+
26
+ def_node_matcher :refute_equal, <<~PATTERN
27
+ {
28
+ (send nil? :assert (send $_ :!= $_) $...)
29
+ (send nil? :refute (send $_ :== $_) $...)
30
+ (send nil? :assert_operator $_ (sym :!=) $_ $...)
31
+ (send nil? :refute_operator $_ (sym :==) $_ $...)
32
+ }
25
33
  PATTERN
26
34
 
35
+ # rubocop:disable Metrics/AbcSize
27
36
  def on_send(node)
28
- preferred = process_not_equal(node)
29
- return unless preferred
30
-
31
- assert_not_equal(node) do |expected, actual|
37
+ refute_equal(node) do |expected, actual, rest_args|
38
+ basic_arguments = "#{expected.source}, #{actual.source}"
39
+ preferred = (message_arg = rest_args.first) ? "#{basic_arguments}, #{message_arg.source}" : basic_arguments
32
40
  message = format(MSG, preferred: preferred)
33
41
 
34
42
  add_offense(node, message: message) do |corrector|
35
43
  corrector.replace(node.loc.selector, 'refute_equal')
36
44
 
37
- replacement = [expected, actual].map(&:source).join(', ')
38
- corrector.replace(node.first_argument, replacement)
39
- end
40
- end
41
- end
42
-
43
- private
45
+ range = if node.method?(:assert) || node.method?(:refute)
46
+ node.first_argument
47
+ else
48
+ node.first_argument.source_range.begin.join(node.arguments[2].source_range.end)
49
+ end
44
50
 
45
- def preferred_usage(first_arg, second_arg, custom_message = nil)
46
- [first_arg, second_arg, custom_message].compact.map(&:source).join(', ')
47
- end
48
-
49
- def original_usage(first_part, custom_message)
50
- [first_part, custom_message].compact.join(', ')
51
- end
52
-
53
- def process_not_equal(node)
54
- assert_not_equal(node) do |first_arg, second_arg, rest_args|
55
- custom_message = rest_args.first
56
-
57
- preferred_usage(first_arg, second_arg, custom_message)
51
+ corrector.replace(range, basic_arguments)
52
+ end
58
53
  end
59
54
  end
55
+ # rubocop:enable Metrics/AbcSize
60
56
  end
61
57
  end
62
58
  end
@@ -11,6 +11,8 @@ module RuboCop
11
11
  # refute(matcher.match(string))
12
12
  # refute(matcher.match?(string))
13
13
  # refute(matcher =~ string)
14
+ # refute_operator(matcher, :=~, string)
15
+ # assert_operator(matcher, :!~, string)
14
16
  # refute(matcher.match(string), 'message')
15
17
  #
16
18
  # # good
@@ -18,10 +20,51 @@ module RuboCop
18
20
  # refute_match(matcher, string, 'message')
19
21
  #
20
22
  class RefuteMatch < Base
21
- extend MinitestCopRule
23
+ include ArgumentRangeHelper
24
+ extend AutoCorrector
22
25
 
23
- define_rule :refute, target_method: %i[match match? =~],
24
- preferred_method: :refute_match, inverse: 'regexp_type?'
26
+ MSG = 'Prefer using `refute_match(%<preferred>s)`.'
27
+ RESTRICT_ON_SEND = %i[refute refute_operator assert_operator].freeze
28
+
29
+ def_node_matcher :refute_match, <<~PATTERN
30
+ {
31
+ (send nil? :refute (send $_ {:match :match? :=~} $_) $...)
32
+ (send nil? :refute_operator $_ (sym :=~) $_ $...)
33
+ (send nil? :assert_operator $_ (sym :!~) $_ $...)
34
+ }
35
+ PATTERN
36
+
37
+ # rubocop:disable Metrics/AbcSize
38
+ def on_send(node)
39
+ refute_match(node) do |expected, actual, rest_args|
40
+ basic_arguments = order_expected_and_actual(expected, actual)
41
+ preferred = (message_arg = rest_args.first) ? "#{basic_arguments}, #{message_arg.source}" : basic_arguments
42
+ message = format(MSG, preferred: preferred)
43
+
44
+ add_offense(node, message: message) do |corrector|
45
+ corrector.replace(node.loc.selector, 'refute_match')
46
+
47
+ range = if node.method?(:refute)
48
+ node.first_argument
49
+ else
50
+ node.first_argument.source_range.begin.join(node.arguments[2].source_range.end)
51
+ end
52
+
53
+ corrector.replace(range, basic_arguments)
54
+ end
55
+ end
56
+ end
57
+ # rubocop:enable Metrics/AbcSize
58
+
59
+ private
60
+
61
+ def order_expected_and_actual(expected, actual)
62
+ if actual.regexp_type?
63
+ [actual, expected]
64
+ else
65
+ [expected, actual]
66
+ end.map(&:source).join(', ')
67
+ end
25
68
  end
26
69
  end
27
70
  end
@@ -18,10 +18,14 @@ module RuboCop
18
18
 
19
19
  MSG = 'Prefer using `refute_operator(%<new_arguments>s)`.'
20
20
  RESTRICT_ON_SEND = %i[refute].freeze
21
+ ALLOWED_OPERATORS = [:[]].freeze
21
22
 
22
23
  def on_send(node)
23
24
  first_argument = node.first_argument
24
- return unless first_argument.respond_to?(:operator_method?) && first_argument.operator_method?
25
+ return unless first_argument.respond_to?(:binary_operation?) && first_argument.binary_operation?
26
+
27
+ operator = first_argument.to_a[1]
28
+ return if ALLOWED_OPERATORS.include?(operator)
25
29
 
26
30
  new_arguments = build_new_arguments(node)
27
31
 
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Minitest
5
5
  # This module holds the RuboCop Minitest version information.
6
6
  module Version
7
- STRING = '0.32.1'
7
+ STRING = '0.33.0'
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-minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.32.1
4
+ version: 0.33.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2023-09-24 00:00:00.000000000 Z
13
+ date: 2023-10-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -117,7 +117,7 @@ metadata:
117
117
  homepage_uri: https://docs.rubocop.org/rubocop-minitest/
118
118
  changelog_uri: https://github.com/rubocop/rubocop-minitest/blob/master/CHANGELOG.md
119
119
  source_code_uri: https://github.com/rubocop/rubocop-minitest
120
- documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.32
120
+ documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.33
121
121
  bug_tracker_uri: https://github.com/rubocop/rubocop-minitest/issues
122
122
  rubygems_mfa_required: 'true'
123
123
  post_install_message: