class RuboCop::Cop::RSpec::ExpectActual
Checks for `expect(…)` calls containing literal values.
@example
# bad expect(5).to eq(price) expect(/foo/).to eq(pattern) expect("John").to eq(name) # good expect(price).to eq(5) expect(pattern).to eq(/foo/) expect(name).to eq("John")
Constants
- COMPLEX_LITERALS
- MSG
- SIMPLE_LITERALS
- SUPPORTED_MATCHERS
Public Instance Methods
on_send(node)
click to toggle source
# File lib/rubocop/cop/rspec/expect_actual.rb, line 60 def on_send(node) expect_literal(node) do |actual, matcher, expected| add_offense(actual.source_range) do |corrector| next unless SUPPORTED_MATCHERS.include?(matcher) next if literal?(expected) swap(corrector, actual, expected) end end end
Private Instance Methods
complex_literal?(node)
click to toggle source
# File lib/rubocop/cop/rspec/expect_actual.rb, line 83 def complex_literal?(node) COMPLEX_LITERALS.include?(node.type) && node.each_child_node.all?(&method(:literal?)) end
literal?(node)
click to toggle source
This is not implement using a NodePattern because it seems to not be able to match against an explicit (nil) sexp
# File lib/rubocop/cop/rspec/expect_actual.rb, line 75 def literal?(node) node && (simple_literal?(node) || complex_literal?(node)) end
simple_literal?(node)
click to toggle source
# File lib/rubocop/cop/rspec/expect_actual.rb, line 79 def simple_literal?(node) SIMPLE_LITERALS.include?(node.type) end
swap(corrector, actual, expected)
click to toggle source
# File lib/rubocop/cop/rspec/expect_actual.rb, line 88 def swap(corrector, actual, expected) corrector.replace(actual.source_range, expected.source) corrector.replace(expected.source_range, actual.source) end