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.something?).to be(true)

@example Strict: false, EnforcedStyle: inflected

# bad
expect(foo.something?).to be_truthy
expect(foo.something?).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

on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/predicate_matcher.rb, line 294
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 285
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 304
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 314
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