class RuboCop::Cop::Style::NilComparison

Checks for comparison of something with nil using ‘==` and `nil?`.

Supported styles are: predicate, comparison.

@example EnforcedStyle: predicate (default)

# bad
if x == nil
end

# good
if x.nil?
end

@example EnforcedStyle: comparison

# bad
if x.nil?
end

# good
if x == nil
end

Constants

EXPLICIT_MSG
PREDICATE_MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/style/nil_comparison.rb, line 46
def on_send(node)
  return unless node.receiver

  style_check?(node) do
    add_offense(node.loc.selector) do |corrector|
      new_code = if prefer_comparison?
                   node.source.sub('.nil?', ' == nil')
                 else
                   node.source.sub(/\s*={2,3}\s*nil/, '.nil?')
                 end

      corrector.replace(node, new_code)

      parent = node.parent
      corrector.wrap(node, '(', ')') if parent.respond_to?(:method?) && parent.method?(:!)
    end
  end
end

Private Instance Methods

message(_node) click to toggle source
# File lib/rubocop/cop/style/nil_comparison.rb, line 67
def message(_node)
  prefer_comparison? ? EXPLICIT_MSG : PREDICATE_MSG
end
prefer_comparison?() click to toggle source
# File lib/rubocop/cop/style/nil_comparison.rb, line 79
def prefer_comparison?
  style == :comparison
end
style_check?(node, &block) click to toggle source
# File lib/rubocop/cop/style/nil_comparison.rb, line 71
def style_check?(node, &block)
  if prefer_comparison?
    nil_check?(node, &block)
  else
    nil_comparison?(node, &block)
  end
end