class RuboCop::Cop::Lint::IdentityComparison
foo.equal?(bar)
# good
foo.object_id == bar.object_id
# bad
@example
`Object#==‘ is provided for the purpose of doing value comparison.
`Object#equal?` is provided to compare objects for identity, and in contrast
Prefer `equal?` over `==` when comparing `object_id`.
def compare_between_object_id_by_double_equal?(node)
def compare_between_object_id_by_double_equal?(node) object_id_method?(node.receiver) && object_id_method?(node.first_argument) end
def object_id_method?(node)
def object_id_method?(node) node.send_type? && node.method?(:object_id) end
def on_send(node)
def on_send(node) return unless compare_between_object_id_by_double_equal?(node) add_offense(node) do |corrector| receiver = node.receiver.receiver argument = node.first_argument.receiver return unless receiver && argument replacement = "#{receiver.source}.equal?(#{argument.source})" corrector.replace(node, replacement) end end