module RuboCop::Cop::Minitest::InstanceOfAssertionHandleable
def build_required_arguments(node, method_name, first_capture, second_capture)
def build_required_arguments(node, method_name, first_capture, second_capture) if node.method?(method_name) [second_capture, first_capture] else [first_capture, second_capture] end.map(&:source).join(', ') end
def investigate(node, assertion_type)
def investigate(node, assertion_type) return unless (first_capture, second_capture, message = instance_of_assertion?(node)) required_arguments = build_required_arguments(node, assertion_type, first_capture, second_capture) full_arguments = [required_arguments, message.first&.source].compact.join(', ') prefer = "#{assertion_type}_instance_of(#{full_arguments})" add_offense(node, message: format(MSG, prefer: prefer)) do |corrector| range = replacement_range(node, assertion_type) corrector.replace(node.loc.selector, "#{assertion_type}_instance_of") corrector.replace(range, required_arguments) end end
def replacement_range(node, method_name)
def replacement_range(node, method_name) if node.method?(method_name) node.first_argument else first_and_second_arguments_range(node) end end