class RuboCop::Cop::RSpec::OverwritingSetup
Checks if there is a let/subject that overwrites an existing one.
@example
# bad let(:foo) { bar } let(:foo) { baz } subject(:foo) { bar } let(:foo) { baz } let(:foo) { bar } let!(:foo) { baz } # good subject(:test) { something } let(:foo) { bar } let(:baz) { baz } let!(:other) { other }
Constants
- MSG
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/rspec/overwriting_setup.rb, line 30 def on_block(node) return unless example_group_with_body?(node) find_duplicates(node.body) do |duplicate, name| add_offense( duplicate, location: :expression, message: format(MSG, name: name) ) end end
Private Instance Methods
common_setup?(node)
click to toggle source
# File lib/rubocop/cop/rspec/overwriting_setup.rb, line 59 def common_setup?(node) return false unless setup?(node) # Search only for setup with basic_literal arguments (e.g. :sym, :str) # or no arguments at all. node.send_node.arguments.all?(&:basic_literal?) end
find_duplicates(node) { |child, name| ... }
click to toggle source
# File lib/rubocop/cop/rspec/overwriting_setup.rb, line 44 def find_duplicates(node) setup_expressions = Set.new node.each_child_node(:block) do |child| next unless common_setup?(child) name = if child.send_node.arguments? first_argument_name(child.send_node).to_sym else :subject end yield child, name unless setup_expressions.add?(name) end end