Class: RuboCop::Cop::RSpec::PredicateMatcher

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
ConfigurableEnforcedStyle, ExplicitHelper, InflectedHelper
Defined in:
lib/rubocop/cop/rspec/predicate_matcher.rb

Overview

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.

Examples:

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)

Strict: false, EnforcedStyle: inflected

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

# good
expect(foo).to be_something

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)

# bad - no autocorrect
expect(foo)
  .to be_something(<<~TEXT)
    bar
  TEXT

# good
expect(foo.something?(<<~TEXT)).to be(true)
  bar
TEXT

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

Constant Summary collapse

RESTRICT_ON_SEND =
Runners.all

Constants included from ExplicitHelper

ExplicitHelper::BUILT_IN_MATCHERS, ExplicitHelper::MSG_EXPLICIT

Constants included from InflectedHelper

InflectedHelper::MSG_INFLECTED

Instance Method Summary collapse

Methods included from RSpec::Language

#example?, #example_group?, #example_group_with_body?, #explicit_rspec?, #hook?, #include?, #let?, #rspec?, #shared_group?, #spec_group?, #subject?

Methods included from RSpec::Language::NodePattern

#block_or_numblock_pattern, #block_pattern, #numblock_pattern, #send_pattern

Methods inherited from Base

inherited, #on_new_investigation

Instance Method Details

#on_block(node) ⇒ Object

rubocop:disable InternalAffairs/NumblockHandler



331
332
333
# File 'lib/rubocop/cop/rspec/predicate_matcher.rb', line 331

def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
  check_explicit(node) if style == :explicit
end

#on_send(node) ⇒ Object



322
323
324
325
326
327
328
329
# File 'lib/rubocop/cop/rspec/predicate_matcher.rb', line 322

def on_send(node)
  case style
  when :inflected
    check_inflected(node)
  when :explicit
    check_explicit(node)
  end
end