class RuboCop::Cop::RSpec::ImplicitSubject


it { expect(subject).to be_truthy }
# good
it { is_expected.to be_truthy }
# bad
@example ‘EnforcedStyle: disallow`
end
expect(subject).to be_truthy
it do
it { is_expected.to be_truthy }
# good
end
is_expected.to be_truthy
it do
# bad
@example `EnforcedStyle: single_line_only`
This cop can be configured using the `EnforcedStyle` option
Checks for usage of implicit subject (`is_expected` / `should`).

def allowed_by_style?(example)

def allowed_by_style?(example)
  if style == :single_line_only
    example.single_line?
  elsif style == :single_statement_only
    !example.body.begin_type?
  else
    false
  end
end

def autocorrect(node)

def autocorrect(node)
  replacement = 'expect(subject)'
  if node.method_name == :should
    replacement += '.to'
  elsif node.method_name == :should_not
    replacement += '.not_to'
  end
  ->(corrector) { corrector.replace(node.loc.selector, replacement) }
end

def on_send(node)

def on_send(node)
  return unless implicit_subject?(node)
  return if valid_usage?(node)
  add_offense(node)
end

def valid_usage?(node)

def valid_usage?(node)
  example = node.ancestors.find { |parent| example?(parent) }
  return false if example.nil?
  example.method_name == :its || allowed_by_style?(example)
end