Skip to content

Commit b446022

Browse files
authored
Merge pull request #272 from koic/add_new_minitest_redundant_message_argument_cop
Add new `Minitest/RedundantMessageArgument` cop
2 parents 7474a84 + 6f03ce6 commit b446022

File tree

5 files changed

+458
-0
lines changed

5 files changed

+458
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* [#272](https://github.com/rubocop/rubocop-minitest/pull/272): Add new Minitest/RedundantMessageArgument cop. ([@koic][])

config/default.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@ Minitest/NonPublicTestMethod:
198198
Severity: warning
199199
VersionAdded: '0.27'
200200

201+
Minitest/RedundantMessageArgument:
202+
Description: 'Detects redundant message argument in assertion methods.'
203+
Enabled: pending
204+
VersionAdded: '<<next>>'
205+
201206
Minitest/RefuteEmpty:
202207
Description: 'This cop enforces to use `refute_empty` instead of using `refute(object.empty?)`.'
203208
StyleGuide: 'https://minitest.rubystyle.guide#refute-empty'
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# frozen_string_literal: true
2+
3+
module RuboCop
4+
module Cop
5+
module Minitest
6+
# Detects redundant message argument in assertion methods.
7+
# The message argument `nil` is redundant because it is the default value.
8+
#
9+
# @example
10+
#
11+
# # bad
12+
# assert_equal(expected, actual, nil)
13+
#
14+
# # good
15+
# assert_equal(expected, actual)
16+
# assert_equal(expected, actual, 'message')
17+
#
18+
class RedundantMessageArgument < Base
19+
extend AutoCorrector
20+
21+
MSG = 'Remove the redundant message argument.'
22+
23+
RESTRICT_ON_SEND = %i[
24+
assert assert_empty assert_equal assert_same assert_in_delta assert_in_epsilon assert_includes
25+
assert_instance_of assert_kind_of assert_match assert_nil assert_operator assert_path_exists
26+
assert_predicate assert_respond_to assert_same assert_throws
27+
flunk
28+
refute refute_empty refute_equal refute_in_delta refute_in_epsilon refute_includes
29+
refute_instance_of refute_kind_of refute_match refute_nil refute_operator refute_path_exists
30+
refute_predicate refute_respond_to refute_same
31+
].freeze
32+
33+
# @!method bad_method?(node)
34+
def_node_matcher :redundant_message_argument, <<~PATTERN
35+
{
36+
(send nil? :assert _ $nil)
37+
(send nil? :assert_empty _ $nil)
38+
(send nil? :assert_equal _ _ $nil)
39+
(send nil? :assert_in_delta _ _ _ $nil)
40+
(send nil? :assert_in_epsilon _ _ _ $nil)
41+
(send nil? :assert_includes _ _ $nil)
42+
(send nil? :assert_instance_of _ _ $nil)
43+
(send nil? :assert_kind_of _ _ $nil)
44+
(send nil? :assert_match _ _ $nil)
45+
(send nil? :assert_nil _ $nil)
46+
(send nil? :assert_operator _ _ _ $nil)
47+
(send nil? :assert_path_exists _ $nil)
48+
(send nil? :assert_predicate _ _ $nil)
49+
(send nil? :assert_respond_to _ _ $nil)
50+
(send nil? :assert_same _ _ $nil)
51+
(send nil? :assert_throws _ $nil)
52+
(send nil? :flunk $nil)
53+
(send nil? :refute _ $nil)
54+
(send nil? :refute_empty _ $nil)
55+
(send nil? :refute_equal _ _ $nil)
56+
(send nil? :refute_in_delta _ _ _ $nil)
57+
(send nil? :refute_in_epsilon _ _ _ $nil)
58+
(send nil? :refute_includes _ _ $nil)
59+
(send nil? :refute_instance_of _ _ $nil)
60+
(send nil? :refute_kind_of _ _ $nil)
61+
(send nil? :refute_match _ _ $nil)
62+
(send nil? :refute_nil _ $nil)
63+
(send nil? :refute_operator _ _ _ $nil)
64+
(send nil? :refute_path_exists _ $nil)
65+
(send nil? :refute_predicate _ _ $nil)
66+
(send nil? :refute_respond_to _ _ $nil)
67+
(send nil? :refute_same _ _ $nil)
68+
}
69+
PATTERN
70+
71+
def on_send(node)
72+
return unless (redundant_message_argument = redundant_message_argument(node))
73+
74+
add_offense(redundant_message_argument) do |corrector|
75+
if node.arguments.one?
76+
range = redundant_message_argument
77+
else
78+
index = node.arguments.index(redundant_message_argument)
79+
range = node.arguments[index - 1].source_range.end.join(redundant_message_argument.source_range.end)
80+
end
81+
82+
corrector.remove(range)
83+
end
84+
end
85+
end
86+
end
87+
end
88+
end

lib/rubocop/cop/minitest_cops.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
require_relative 'minitest/assert_truthy'
3131
require_relative 'minitest/duplicate_test_run'
3232
require_relative 'minitest/empty_line_before_assertion_methods'
33+
require_relative 'minitest/redundant_message_argument'
3334
require_relative 'minitest/return_in_test_method'
3435
require_relative 'minitest/test_file_name'
3536
require_relative 'minitest/global_expectations'

0 commit comments

Comments
 (0)