class RuboCop::Cop::RSpec::ImplicitExpect

Check that a consistent implicit expectation style is used.

This cop can be configured using the `EnforcedStyle` option and supports the `–auto-gen-config` flag.

@example `EnforcedStyle: is_expected`

# bad
it { should be_truthy }

# good
it { is_expected.to be_truthy }

@example `EnforcedStyle: should`

# bad
it { is_expected.to be_truthy }

# good
it { should be_truthy }

Constants

ENFORCED_REPLACEMENTS
MSG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/rspec/implicit_expect.rb, line 65
def autocorrect(node)
  lambda do |corrector|
    offense     = offending_expect(node)
    replacement = replacement_source(offense.source)

    corrector.replace(offense, replacement)
  end
end
on_send(node) click to toggle source
# File lib/rubocop/cop/rspec/implicit_expect.rb, line 47
def on_send(node) # rubocop:disable Metrics/MethodLength
  return unless (source_range = offending_expect(node))

  expectation_source = source_range.source

  if expectation_source.start_with?(style.to_s)
    correct_style_detected
  else
    opposite_style_detected

    add_offense(
      node,
      location: source_range,
      message: offense_message(expectation_source)
    )
  end
end

Private Instance Methods

is_expected_range(source_map) click to toggle source
# File lib/rubocop/cop/rspec/implicit_expect.rb, line 85
def is_expected_range(source_map) # rubocop:disable PredicateName
  Parser::Source::Range.new(
    source_map.expression.source_buffer,
    source_map.expression.begin_pos,
    source_map.selector.end_pos
  )
end
offending_expect(node) click to toggle source
# File lib/rubocop/cop/rspec/implicit_expect.rb, line 76
def offending_expect(node)
  case implicit_expect(node)
  when :is_expected
    is_expected_range(node.loc)
  when :should, :should_not
    node.loc.selector
  end
end
offense_message(offending_source) click to toggle source
# File lib/rubocop/cop/rspec/implicit_expect.rb, line 93
def offense_message(offending_source)
  format(
    MSG,
    good: replacement_source(offending_source),
    bad:  offending_source
  )
end
replacement_source(offending_source) click to toggle source
# File lib/rubocop/cop/rspec/implicit_expect.rb, line 101
def replacement_source(offending_source)
  ENFORCED_REPLACEMENTS.fetch(offending_source)
end