class RuboCop::Cop::InternalAffairs::LocationLineEqualityComparison

Enforces the use of `same_line?` instead of location line comparison for equality.

@example

# bad
node.loc.line == node.parent.loc.line

# bad
node.loc.first_line == node.parent.loc.first_line

# good
same_line?(node, node.parent)

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb, line 36
def on_send(node)
  return unless location_line_equality_comparison?(node)

  lhs, _op, rhs = *node

  lhs_receiver = extract_receiver(lhs)
  rhs_receiver = extract_receiver(rhs)
  preferred = "same_line?(#{lhs_receiver}, #{rhs_receiver})"

  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/location_line_equality_comparison.rb, line 52
def extract_receiver(node)
  receiver = node.receiver
  receiver = receiver.receiver if receiver.method?(:loc) || receiver.method?(:source_range)
  receiver.source
end