From d055d3b412f1cae425999618bd76c00b64adf3b1 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Fri, 16 Sep 2022 02:20:53 +0900 Subject: [PATCH] [Fix #183] Fix an error for `Minitest/AssertMatch` Fixes #183. This PR fixes an error for `Minitest/AssertMatch` when using `assert` with no arguments `match`. --- .../fix_an_error_for_minitest_assert_match.md | 1 + lib/rubocop/cop/mixin/minitest_cop_rule.rb | 1 + .../rubocop/cop/minitest/assert_match_test.rb | 20 +++++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 changelog/fix_an_error_for_minitest_assert_match.md diff --git a/changelog/fix_an_error_for_minitest_assert_match.md b/changelog/fix_an_error_for_minitest_assert_match.md new file mode 100644 index 00000000..1e66b939 --- /dev/null +++ b/changelog/fix_an_error_for_minitest_assert_match.md @@ -0,0 +1 @@ +* [#183](https://github.com/rubocop/rubocop-minitest/issues/183): Fix an error for `Minitest/AssertMatch` when using `assert` with no arguments `match`. ([@koic][]) diff --git a/lib/rubocop/cop/mixin/minitest_cop_rule.rb b/lib/rubocop/cop/mixin/minitest_cop_rule.rb index 15b61a60..64146b4f 100644 --- a/lib/rubocop/cop/mixin/minitest_cop_rule.rb +++ b/lib/rubocop/cop/mixin/minitest_cop_rule.rb @@ -36,6 +36,7 @@ def define_rule(assertion_method, target_method:, preferred_method: nil, inverse def on_send(node) return unless node.method?(:#{assertion_method}) return unless (arguments = peel_redundant_parentheses_from(node.arguments)) + return if arguments.first&.call_type? && arguments.first.arguments.empty? return unless arguments.first.respond_to?(:method?) && arguments.first.method?(:#{target_method}) add_offense(node, message: offense_message(arguments)) do |corrector| diff --git a/test/rubocop/cop/minitest/assert_match_test.rb b/test/rubocop/cop/minitest/assert_match_test.rb index 3014c130..6d547acb 100644 --- a/test/rubocop/cop/minitest/assert_match_test.rb +++ b/test/rubocop/cop/minitest/assert_match_test.rb @@ -132,4 +132,24 @@ def test_do_something end RUBY end + + def test_does_not_register_offense_when_using_assert_with_no_arguments_match_call + assert_no_offenses(<<~RUBY) + class FooTest < Minitest::Test + def test_do_something + assert(matcher.match) + end + end + RUBY + end + + def test_does_not_register_offense_when_using_assert_with_no_arguments_match_safe_navigation_call + assert_no_offenses(<<~RUBY) + class FooTest < Minitest::Test + def test_do_something + assert(matcher&.match) + end + end + RUBY + end end