class RuboCop::Cop::RSpec::ScatteredLet

Checks for let scattered across the example group.

Group lets together

@example

# bad
describe Foo do
  let(:foo) { 1 }
  subject { Foo }
  let(:bar) { 2 }
  before { prepare }
  let!(:baz) { 3 }
end

# good
describe Foo do
  subject { Foo }
  before { prepare }
  let(:foo) { 1 }
  let(:bar) { 2 }
  let!(:baz) { 3 }
end

Constants

MSG

Public Instance Methods

check_let_declarations(node) click to toggle source
# File lib/rubocop/cop/rspec/scattered_let.rb, line 41
def check_let_declarations(node)
  let_found = false
  mix_found = false

  node.each_child_node do |child|
    if let?(child)
      add_offense(child, location: :expression) if mix_found
      let_found = true
    elsif let_found
      mix_found = true
    end
  end
end
on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/scattered_let.rb, line 33
def on_block(node)
  return unless example_group_with_body?(node)

  _describe, _args, body = *node

  check_let_declarations(body)
end