Skip to content

Commit a925f96

Browse files
committed
refactor: define node matchers on assertion classes
1 parent ad2eab3 commit a925f96

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

lib/rubocop/cop/rspec_rails/minitest_assertions.rb

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ class MinitestAssertions < Base
2828

2929
# :nodoc:
3030
class BasicAssertion
31+
extend NodePattern::Macros
32+
33+
def self.minitest_assertion
34+
raise NotImplementedError
35+
end
36+
3137
def initialize(expected, actual, fail_message)
3238
@expected = expected&.source
3339
@actual = actual.source
@@ -60,7 +66,8 @@ class EqualAssertion < BasicAssertion
6066
refute_equal
6167
].freeze
6268

63-
NODE_MATCHER_PATTERN = <<~PATTERN
69+
# @!method self.minitest_assertion(node)
70+
def_node_matcher 'self.minitest_assertion', <<~PATTERN # rubocop:disable InternalAffairs/NodeMatcherDirective
6471
(send nil? {:assert_equal :assert_not_equal :refute_equal} $_ $_ $_?)
6572
PATTERN
6673

@@ -81,7 +88,8 @@ class InstanceOfAssertion < BasicAssertion
8188
refute_instance_of
8289
].freeze
8390

84-
NODE_MATCHER_PATTERN = <<~PATTERN
91+
# @!method self.minitest_assertion(node)
92+
def_node_matcher 'self.minitest_assertion', <<~PATTERN # rubocop:disable InternalAffairs/NodeMatcherDirective
8593
(send nil? {:assert_instance_of :assert_not_instance_of :refute_instance_of} $_ $_ $_?)
8694
PATTERN
8795

@@ -102,7 +110,8 @@ class IncludesAssertion < BasicAssertion
102110
refute_includes
103111
].freeze
104112

105-
NODE_MATCHER_PATTERN = <<~PATTERN
113+
# @!method self.minitest_assertion(node)
114+
def_node_matcher 'self.minitest_assertion', <<~PATTERN # rubocop:disable InternalAffairs/NodeMatcherDirective
106115
(send nil? {:assert_includes :assert_not_includes :refute_includes} $_ $_ $_?)
107116
PATTERN
108117

@@ -123,7 +132,8 @@ class PredicateAssertion < BasicAssertion
123132
refute_predicate
124133
].freeze
125134

126-
NODE_MATCHER_PATTERN = <<~PATTERN
135+
# @!method self.minitest_assertion(node)
136+
def_node_matcher 'self.minitest_assertion', <<~PATTERN # rubocop:disable InternalAffairs/NodeMatcherDirective
127137
(send nil? {:assert_predicate :assert_not_predicate :refute_predicate} $_ ${sym} $_?)
128138
PATTERN
129139

@@ -145,7 +155,8 @@ class MatchAssertion < BasicAssertion
145155
refute_match
146156
].freeze
147157

148-
NODE_MATCHER_PATTERN = <<~PATTERN
158+
# @!method self.minitest_assertion(node)
159+
def_node_matcher 'self.minitest_assertion', <<~PATTERN # rubocop:disable InternalAffairs/NodeMatcherDirective
149160
(send nil? {:assert_match :refute_match} $_ $_ $_?)
150161
PATTERN
151162

@@ -166,7 +177,8 @@ class NilAssertion < BasicAssertion
166177
refute_nil
167178
].freeze
168179

169-
NODE_MATCHER_PATTERN = <<~PATTERN
180+
# @!method self.minitest_assertion(node)
181+
def_node_matcher 'self.minitest_assertion', <<~PATTERN # rubocop:disable InternalAffairs/NodeMatcherDirective
170182
(send nil? {:assert_nil :assert_not_nil :refute_nil} $_ $_?)
171183
PATTERN
172184

@@ -187,7 +199,8 @@ class EmptyAssertion < BasicAssertion
187199
refute_empty
188200
].freeze
189201

190-
NODE_MATCHER_PATTERN = <<~PATTERN
202+
# @!method self.minitest_assertion(node)
203+
def_node_matcher 'self.minitest_assertion', <<~PATTERN # rubocop:disable InternalAffairs/NodeMatcherDirective
191204
(send nil? {:assert_empty :assert_not_empty :refute_empty} $_ $_?)
192205
PATTERN
193206

@@ -211,17 +224,9 @@ def assertion
211224

212225
RESTRICT_ON_SEND = ASSERTION_MATCHERS.flat_map { |m| m::MATCHERS }
213226

214-
ASSERTION_MATCHERS.each do |m|
215-
name = m.name.split('::').last
216-
217-
def_node_matcher "minitest_#{name}".to_sym, m::NODE_MATCHER_PATTERN
218-
end
219-
220227
def on_send(node)
221228
ASSERTION_MATCHERS.each do |m|
222-
name = m.name.split('::').last
223-
224-
public_send("minitest_#{name}".to_sym, node) do |*args|
229+
m.minitest_assertion(node) do |*args|
225230
assertion = m.match(*args)
226231

227232
next if assertion.nil?

0 commit comments

Comments
 (0)