class RuboCop::Cop::RSpec::RedundantPredicateMatcher


expect(foo).to all be(bar)
expect(foo).not_to include(bar)
expect(foo).to exist(bar)
# good
expect(foo).to be_all(bar)
expect(foo).not_to be_include(bar)
expect(foo).to be_exist(bar)
# bad
@example
Checks for redundant predicate matcher.

def message(bad_method, good_method)

def message(bad_method, good_method)
  format(MSG, bad: bad_method, good: good_method)
end

def on_send(node)

def on_send(node)
  return if node.parent.block_type? || node.arguments.empty?
  return unless replaceable_arguments?(node)
  method_name = node.method_name.to_s
  replaced = replaced_method_name(method_name)
  add_offense(node, message: message(method_name,
                                     replaced)) do |corrector|
    unless node.method?(:be_all)
      corrector.replace(node.loc.selector, replaced)
    end
  end
end

def replaceable_arguments?(node)

def replaceable_arguments?(node)
  if node.method?(:be_all)
    node.first_argument.send_type?
  else
    true
  end
end

def replaced_method_name(method_name)

def replaced_method_name(method_name)
  name = method_name.to_s.delete_prefix('be_')
  if name == 'exists'
    'exist'
  else
    name
  end
end