class RuboCop::Cop::RSpec::ClassCheck


expect(object).to be_a_kind_of(String)
expect(object).to be_kind_of(String)
# good
expect(object).to be_an(String)
expect(object).to be_a(String)
# bad
@example EnforcedStyle: be_kind_of
expect(object).to be_an(String)
expect(object).to be_a(String)
# good
expect(object).to be_a_kind_of(String)
expect(object).to be_kind_of(String)
# bad
@example EnforcedStyle: be_a (default)
Enforces consistent use of ‘be_a` or `be_kind_of`.

def autocorrect(corrector, node)

def autocorrect(corrector, node)
  corrector.replace(node.loc.selector, preferred_method_name)
end

def format_message(node)

def format_message(node)
  format(
    MSG,
    current: node.method_name,
    preferred: preferred_method_name
  )
end

def offending?(node)

def offending?(node)
  !node.receiver && !preferred_method_name?(node.method_name)
end

def on_send(node)

def on_send(node)
  return unless offending?(node)
  add_offense(
    node.loc.selector,
    message: format_message(node)
  ) do |corrector|
    autocorrect(corrector, node)
  end
end

def preferred_method_name

def preferred_method_name
  PREFERRED_METHOD_NAME_BY_STYLE[style]
end

def preferred_method_name?(method_name)

def preferred_method_name?(method_name)
  preferred_method_names.include?(method_name)
end

def preferred_method_names

def preferred_method_names
  if style == :be_a
    METHOD_NAMES_FOR_BE_A
  else
    METHOD_NAMES_FOR_KIND_OF
  end
end