class RuboCop::Cop::RSpec::LeadingSubject
it { expect_something_else }
it { expect_something }
subject { described_class.new(params) }
# good
before { do_something }
subject { described_class.new(params) }
# good
let(:params) { blah }
subject { described_class.new(params) }
# good
it { expect_something_else }
subject { described_class.new(params) }
it { expect_something }
subject { described_class.new(params) }
before { do_something }
subject { described_class.new(params) }
let(:params) { blah }
# bad
@example
Enforce that subject is the first definition in the test.
def autocorrect(corrector, node, sibling)
def autocorrect(corrector, node, sibling) RuboCop::RSpec::Corrector::MoveNode.new( node, corrector, processed_source ).move_before(sibling) end
def check_previous_nodes(node)
def check_previous_nodes(node) offending_node(node) do |offender| msg = format(MSG, offending: offender.method_name) add_offense(node, message: msg) do |corrector| autocorrect(corrector, node, offender) end end end
def in_spec_block?(node)
def in_spec_block?(node) node.each_ancestor(:block).any? do |ancestor| example?(ancestor) end end
def offending?(node)
def offending?(node) let?(node) || hook?(node) || example?(node) || spec_group?(node) || include?(node) end
def offending_node(node)
def offending_node(node) parent(node).each_child_node.find do |sibling| break if sibling.equal?(node) yield sibling if offending?(sibling) end end
def on_block(node)
def on_block(node) return unless subject?(node) && !in_spec_block?(node) check_previous_nodes(node) end
def parent(node)
def parent(node) node.each_ancestor(:block).first.body end