class RuboCop::Cop::InternalAffairs::SingleLineComparison

Enforces the use of `node.single_line?` instead of comparing `first_line` and `last_line` for equality.

@example

# bad
node.loc.first_line == node.loc.last_line

# bad
node.loc.last_line == node.loc.first_line

# bad
node.loc.line == node.loc.last_line

# bad
node.loc.last_line == node.loc.line

# bad
node.first_line == node.last_line

# good
node.single_line?

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/internal_affairs/single_line_comparison.rb, line 42
def on_send(node)
  return unless (receiver = single_line_comparison(node))

  bang = node.method?(:!=) ? '!' : ''
  preferred = "#{bang}#{extract_receiver(receiver)}.single_line?"

  add_offense(node, message: format(MSG, preferred: preferred)) do |corrector|
    corrector.replace(node, preferred)
  end
end

Private Instance Methods

extract_receiver(node) click to toggle source
# File lib/rubocop/cop/internal_affairs/single_line_comparison.rb, line 55
def extract_receiver(node)
  node = node.receiver if node.send_type? && %i[loc source_range].include?(node.method_name)
  node.source
end