rubocop-minitest 0.14.0 → 0.15.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: bcdc752936f6002cc925a5ca82039770b2977685a53f182250b0cc75fffbb412
4
- data.tar.gz: a634c0d0fa393ef7f00b07ebb8c17063df18c8e4d92643eb361699c1fa327097
3
+ metadata.gz: fa7a9c739cc54955a9c7647d8d5442c18f7888acb54212da90598fbec357717b
4
+ data.tar.gz: 784f7adfaeb34d54fedeaedcadd528cdffb6c888569a1314082b2c93217b5f3f
5
5
  SHA512:
6
- metadata.gz: 1879892d3bb7d99c4e2e1c483f1c9f93b990f55fecc71f5ae37b0193bfde0ae7167588d21fbf3a62abdfa26f4e88efc2655d0ddc4e0f078f23fe5f05843e95ca
7
- data.tar.gz: c411392994e053920757c682c793defae132d9fd4e556c131f6c4a74fef3d93dca05fab0f3bd91a3081e038a943dd41a00b88626966b0c74928e97afa0cec65f
6
+ metadata.gz: b7bf8ad7fa1be35b461ab54c2097ccd4c6fd320f1b15341c253f527099afeebee139feb33007f6b471309aaad6bb0f6f4534a52e32b2e3bc0f45344a4e5588ef
7
+ data.tar.gz: a73427443b2f4cb050f5e7893809f8026dbb41c4dc77461e6aa07fc13228e60f36a6bec7e893745eb14d911f143556003166028eb5abfcfea8f49b676ae50dbb
data/.rubocop.yml CHANGED
@@ -25,16 +25,9 @@ Naming/PredicateName:
25
25
 
26
26
  Naming/InclusiveLanguage:
27
27
  FlaggedTerms:
28
- whitelist:
28
+ offence:
29
29
  Suggestions:
30
- - allowlist
31
- blacklist:
32
- Suggestions:
33
- - denylist
34
- master:
35
- AllowedRegex:
36
- - 'blob/master/'
37
- - 'master \(unreleased\)'
30
+ - offense
38
31
 
39
32
  Style/FormatStringToken:
40
33
  # Because we parse a lot of source codes from strings. Percent arrays
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.15.0 (2021-08-09)
6
+
7
+ ### New features
8
+
9
+ * [#140](https://github.com/rubocop/rubocop-minitest/issues/140): Make `Minitest/AssertNil` and `Minitest/RefuteNil` aware of `assert(obj.nil?)` and `refute(obj.nil?)`. ([@koic][])
10
+
5
11
  ## 0.14.0 (2021-07-03)
6
12
 
7
13
  ### New features
data/bin/console CHANGED
@@ -2,16 +2,10 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'bundler/setup'
5
- require 'pathname'
6
- require 'yaml'
7
- require 'rubocop/minitest'
8
-
9
- # You can add fixtures and/or initialization code here to make experimenting
10
- # with your gem easier. You can also use a different console, if you like.
5
+ require 'irb'
6
+ require 'rubocop'
7
+ require 'rubocop-minitest'
11
8
 
12
- # (If you use this, don't forget to add pry to your Gemfile!)
13
- # require "pry"
14
- # Pry.start
9
+ ARGV.clear
15
10
 
16
- require 'irb'
17
11
  IRB.start(__FILE__)
data/config/default.yml CHANGED
@@ -59,7 +59,7 @@ Minitest/AssertKindOf:
59
59
  VersionAdded: '0.10'
60
60
 
61
61
  Minitest/AssertNil:
62
- Description: 'This cop enforces the test to use `assert_nil` instead of using `assert_equal(nil, something)`.'
62
+ Description: 'This cop enforces the test to use `assert_nil` instead of using `assert_equal(nil, something)` or `assert(something.nil?)`.'
63
63
  StyleGuide: 'https://minitest.rubystyle.guide#assert-nil'
64
64
  Enabled: true
65
65
  VersionAdded: '0.1'
@@ -172,7 +172,7 @@ Minitest/RefuteKindOf:
172
172
  VersionAdded: '0.10'
173
173
 
174
174
  Minitest/RefuteNil:
175
- Description: 'This cop enforces the test to use `refute_nil` instead of using `refute_equal(nil, something)`.'
175
+ Description: 'This cop enforces the test to use `refute_nil` instead of using `refute_equal(nil, something)` or `refute(something.nil?)`.'
176
176
  StyleGuide: 'https://minitest.rubystyle.guide#refute-nil'
177
177
  Enabled: true
178
178
  VersionAdded: '0.2'
data/docs/antora.yml CHANGED
@@ -2,6 +2,6 @@ name: rubocop-minitest
2
2
  title: RuboCop Minitest
3
3
  # We always provide version without patch here (e.g. 1.1),
4
4
  # as patch versions should not appear in the docs.
5
- version: '0.14'
5
+ version: '0.15'
6
6
  nav:
7
7
  - modules/ROOT/nav.adoc
@@ -261,8 +261,8 @@ assert_match(matcher, string, 'message')
261
261
  | -
262
262
  |===
263
263
 
264
- This cop enforces the test to use `assert_nil`
265
- instead of using `assert_equal(nil, something)`.
264
+ This cop enforces the test to use `assert_nil` instead of using
265
+ `assert_equal(nil, something)` or `assert(something.nil?)`.
266
266
 
267
267
  === Examples
268
268
 
@@ -271,6 +271,8 @@ instead of using `assert_equal(nil, something)`.
271
271
  # bad
272
272
  assert_equal(nil, actual)
273
273
  assert_equal(nil, actual, 'message')
274
+ assert(object.nil?)
275
+ assert(object.nil?, 'message')
274
276
 
275
277
  # good
276
278
  assert_nil(actual)
@@ -927,8 +929,8 @@ refute_match(matcher, string, 'message')
927
929
  | -
928
930
  |===
929
931
 
930
- This cop enforces the test to use `refute_nil`
931
- instead of using `refute_equal(nil, something)`.
932
+ This cop enforces the test to use `refute_nil` instead of using
933
+ `refute_equal(nil, something)` or `refute(something.nil?)`.
932
934
 
933
935
  === Examples
934
936
 
@@ -937,6 +939,8 @@ instead of using `refute_equal(nil, something)`.
937
939
  # bad
938
940
  refute_equal(nil, actual)
939
941
  refute_equal(nil, actual, 'message')
942
+ refute(actual.nil?)
943
+ refute(actual.nil?, 'message')
940
944
 
941
945
  # good
942
946
  refute_nil(actual)
@@ -3,13 +3,15 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Minitest
6
- # This cop enforces the test to use `assert_nil`
7
- # instead of using `assert_equal(nil, something)`.
6
+ # This cop enforces the test to use `assert_nil` instead of using
7
+ # `assert_equal(nil, something)` or `assert(something.nil?)`.
8
8
  #
9
9
  # @example
10
10
  # # bad
11
11
  # assert_equal(nil, actual)
12
12
  # assert_equal(nil, actual, 'message')
13
+ # assert(object.nil?)
14
+ # assert(object.nil?, 'message')
13
15
  #
14
16
  # # good
15
17
  # assert_nil(actual)
@@ -17,27 +19,29 @@ module RuboCop
17
19
  #
18
20
  class AssertNil < Base
19
21
  include ArgumentRangeHelper
22
+ include NilAssertionHandleable
20
23
  extend AutoCorrector
21
24
 
22
- MSG = 'Prefer using `assert_nil(%<arguments>s)` over ' \
23
- '`assert_equal(nil, %<arguments>s)`.'
24
- RESTRICT_ON_SEND = %i[assert_equal].freeze
25
+ ASSERTION_TYPE = 'assert'
26
+ RESTRICT_ON_SEND = %i[assert_equal assert].freeze
25
27
 
26
- def_node_matcher :assert_equal_with_nil, <<~PATTERN
27
- (send nil? :assert_equal nil $_ $...)
28
+ def_node_matcher :nil_assertion, <<~PATTERN
29
+ {
30
+ (send nil? :assert_equal nil $_ $...)
31
+ (send nil? :assert (send $_ :nil?) $...)
32
+ }
28
33
  PATTERN
29
34
 
30
35
  def on_send(node)
31
- assert_equal_with_nil(node) do |actual, message|
32
- message = message.first
36
+ nil_assertion(node) do |actual, message|
37
+ register_offense(node, actual, message)
38
+ end
39
+ end
33
40
 
34
- arguments = [actual.source, message&.source].compact.join(', ')
41
+ private
35
42
 
36
- add_offense(node, message: format(MSG, arguments: arguments)) do |corrector|
37
- corrector.replace(node.loc.selector, 'assert_nil')
38
- corrector.replace(first_and_second_arguments_range(node), actual.source)
39
- end
40
- end
43
+ def assertion_type
44
+ ASSERTION_TYPE
41
45
  end
42
46
  end
43
47
  end
@@ -3,13 +3,15 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Minitest
6
- # This cop enforces the test to use `refute_nil`
7
- # instead of using `refute_equal(nil, something)`.
6
+ # This cop enforces the test to use `refute_nil` instead of using
7
+ # `refute_equal(nil, something)` or `refute(something.nil?)`.
8
8
  #
9
9
  # @example
10
10
  # # bad
11
11
  # refute_equal(nil, actual)
12
12
  # refute_equal(nil, actual, 'message')
13
+ # refute(actual.nil?)
14
+ # refute(actual.nil?, 'message')
13
15
  #
14
16
  # # good
15
17
  # refute_nil(actual)
@@ -17,29 +19,29 @@ module RuboCop
17
19
  #
18
20
  class RefuteNil < Base
19
21
  include ArgumentRangeHelper
22
+ include NilAssertionHandleable
20
23
  extend AutoCorrector
21
24
 
22
- MSG = 'Prefer using `refute_nil(%<arguments>s)` over ' \
23
- '`refute_equal(nil, %<arguments>s)`.'
24
- RESTRICT_ON_SEND = %i[refute_equal].freeze
25
+ ASSERTION_TYPE = 'refute'
26
+ RESTRICT_ON_SEND = %i[refute_equal refute].freeze
25
27
 
26
- def_node_matcher :refute_equal_with_nil, <<~PATTERN
27
- (send nil? :refute_equal nil $_ $...)
28
+ def_node_matcher :nil_refutation, <<~PATTERN
29
+ {
30
+ (send nil? :refute_equal nil $_ $...)
31
+ (send nil? :refute (send $_ :nil?) $...)
32
+ }
28
33
  PATTERN
29
34
 
30
35
  def on_send(node)
31
- refute_equal_with_nil(node) do |actual, message|
32
- message = message.first
36
+ nil_refutation(node) do |actual, message|
37
+ register_offense(node, actual, message)
38
+ end
39
+ end
33
40
 
34
- arguments = [actual.source, message&.source].compact.join(', ')
41
+ private
35
42
 
36
- add_offense(node, message: format(MSG, arguments: arguments)) do |corrector|
37
- corrector.replace(node.loc.selector, 'refute_nil')
38
- corrector.replace(
39
- first_and_second_arguments_range(node), actual.source
40
- )
41
- end
42
- end
43
+ def assertion_type
44
+ ASSERTION_TYPE
43
45
  end
44
46
  end
45
47
  end
@@ -4,6 +4,7 @@ require_relative 'mixin/argument_range_helper'
4
4
  require_relative 'mixin/in_delta_mixin'
5
5
  require_relative 'mixin/minitest_cop_rule'
6
6
  require_relative 'mixin/minitest_exploration_helpers'
7
+ require_relative 'mixin/nil_assertion_handleable'
7
8
  require_relative 'minitest/assert_empty'
8
9
  require_relative 'minitest/assert_empty_literal'
9
10
  require_relative 'minitest/assert_equal'
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Minitest
6
+ # Common functionality for `AssertNil` and `RefuteNil` cops.
7
+ module NilAssertionHandleable
8
+ MSG = 'Prefer using `%<assertion_type>s_nil(%<preferred_args>s)` over `%<method>s(%<current_args>s)`.'
9
+
10
+ private
11
+
12
+ def register_offense(node, actual, message)
13
+ message = build_message(node, actual, message)
14
+
15
+ add_offense(node, message: message) do |corrector|
16
+ autocorrect(corrector, node, actual)
17
+ end
18
+ end
19
+
20
+ def build_message(node, actual, message)
21
+ message = message.first
22
+ message_source = message&.source
23
+
24
+ preferred_args = [actual.source, message_source].compact
25
+ current_args = if comparison_assertion_method?(node)
26
+ ['nil', preferred_args].join(', ')
27
+ else
28
+ ["#{actual.source}.nil?", message_source].compact.join(', ')
29
+ end
30
+
31
+ format(
32
+ MSG,
33
+ assertion_type: assertion_type,
34
+ preferred_args: preferred_args.join(', '),
35
+ method: node.method_name, current_args: current_args
36
+ )
37
+ end
38
+
39
+ def autocorrect(corrector, node, actual)
40
+ corrector.replace(node.loc.selector, :"#{assertion_type}_nil")
41
+ if comparison_assertion_method?(node)
42
+ corrector.replace(first_and_second_arguments_range(node), actual.source)
43
+ else
44
+ corrector.remove(node.first_argument.loc.dot)
45
+ corrector.remove(node.first_argument.loc.selector)
46
+ end
47
+ end
48
+
49
+ def comparison_assertion_method?(node)
50
+ node.method?(:"#{assertion_type}_equal")
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -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.14.0'
7
+ STRING = '0.15.0'
8
8
 
9
9
  def self.document_version
10
10
  STRING.match('\d+\.\d+').to_s
@@ -0,0 +1,5 @@
1
+ ### New features
2
+
3
+ * [#140](https://github.com/rubocop/rubocop-minitest/issues/140): Make `Minitest/AssertNil` and `Minitest/RefuteNil` aware of `assert(obj.nil?)` and `refute(obj.nil?)`. ([@koic][])
4
+
5
+ [@koic]: https://github.com/koic
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.14.0
4
+ version: 0.15.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: 2021-07-02 00:00:00.000000000 Z
13
+ date: 2021-08-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -125,6 +125,7 @@ files:
125
125
  - lib/rubocop/cop/mixin/in_delta_mixin.rb
126
126
  - lib/rubocop/cop/mixin/minitest_cop_rule.rb
127
127
  - lib/rubocop/cop/mixin/minitest_exploration_helpers.rb
128
+ - lib/rubocop/cop/mixin/nil_assertion_handleable.rb
128
129
  - lib/rubocop/minitest.rb
129
130
  - lib/rubocop/minitest/inject.rb
130
131
  - lib/rubocop/minitest/version.rb
@@ -141,6 +142,7 @@ files:
141
142
  - relnotes/v0.12.1.md
142
143
  - relnotes/v0.13.0.md
143
144
  - relnotes/v0.14.0.md
145
+ - relnotes/v0.15.0.md
144
146
  - relnotes/v0.2.0.md
145
147
  - relnotes/v0.2.1.md
146
148
  - relnotes/v0.3.0.md
@@ -165,7 +167,7 @@ metadata:
165
167
  homepage_uri: https://docs.rubocop.org/rubocop-minitest/
166
168
  changelog_uri: https://github.com/rubocop/rubocop-minitest/blob/master/CHANGELOG.md
167
169
  source_code_uri: https://github.com/rubocop/rubocop-minitest
168
- documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.14
170
+ documentation_uri: https://docs.rubocop.org/rubocop-minitest/0.15
169
171
  bug_tracker_uri: https://github.com/rubocop/rubocop-minitest/issues
170
172
  post_install_message:
171
173
  rdoc_options: []