class RuboCop::Cop::RSpec::PredicateMatcher

Prefer using predicate matcher over using predicate method directly.

RSpec defines magic matchers for predicate methods. This cop recommends to use the predicate matcher instead of using predicate method directly.

@example Strict: true, EnforcedStyle: inflected (default)

# bad
expect(foo.something?).to be_truthy

# good
expect(foo).to be_something

# also good - It checks "true" strictly.
expect(foo).to be(true)

@example Strict: false, EnforcedStyle: inflected

# bad
expect(foo.something?).to be_truthy
expect(foo).to be(true)

# good
expect(foo).to be_something

@example Strict: true, EnforcedStyle: explicit

# bad
expect(foo).to be_something

# good - the above code is rewritten to it by this cop
expect(foo.something?).to be(true)

@example Strict: false, EnforcedStyle: explicit

# bad
expect(foo).to be_something

# good - the above code is rewritten to it by this cop
expect(foo.something?).to be_truthy

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 320
def autocorrect(node)
  case style
  when :inflected
    autocorrect_inflected(node)
  when :explicit
    autocorrect_explicit(node)
  end
end
on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 316
def on_block(node)
  check_explicit(node) if style == :explicit
end
on_send(node) click to toggle source
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 307
def on_send(node)
  case style
  when :inflected
    check_inflected(node)
  when :explicit
    check_explicit(node)
  end
end

Private Instance Methods

args_loc(send_node) click to toggle source

returns args location with whitespace @example

foo 1, 2
   ^^^^^
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 335
def args_loc(send_node)
  send_node.loc.selector.end.with(
    end_pos: send_node.loc.expression.end_pos
  )
end
block_loc(send_node) click to toggle source

returns block location with whitespace @example

foo { bar }
   ^^^^^^^^
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 345
def block_loc(send_node)
  parent = send_node.parent
  return unless parent.block_type?

  send_node.loc.expression.end.with(
    end_pos: parent.loc.expression.end_pos
  )
end