class RuboCop::Cop::Style::ZeroLengthPredicate

!hash.empty?
!string.empty?
!{a: 1, b: 2}.empty?
array.empty?
“foobar”.empty?
[1, 2, 3].empty?
# good
hash.size > 0
string.length > 0
{a: 1, b: 2}.length != 0
array.length < 1
0 == “foobar”.length
[1, 2, 3].length == 0
# bad
@example
replaced by receiver.empty? and !receiver.empty.
receiver.length < 1 and receiver.size == 0 that can be
receiver.length > 0, receiver.length != 0,
by a predicate method, such as receiver.length == 0,
This cop checks for numeric comparisons that can be replaced

def autocorrect(node)

def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.loc.expression, replacement(node))
  end
end

def check_nonzero_length_predicate(node)

def check_nonzero_length_predicate(node)
  nonzero_length_predicate = nonzero_length_predicate(node)
  return unless nonzero_length_predicate
  lhs, opr, rhs = nonzero_length_predicate
  add_offense(
    node,
    message: format(NONZERO_MSG, lhs: lhs, opr: opr, rhs: rhs)
  )
end

def check_zero_length_predicate(node)

def check_zero_length_predicate(node)
  zero_length_predicate = zero_length_predicate(node)
  return unless zero_length_predicate
  lhs, opr, rhs = zero_length_predicate
  add_offense(
    node,
    message: format(ZERO_MSG, lhs: lhs, opr: opr, rhs: rhs)
  )
end

def on_send(node)

def on_send(node)
  check_zero_length_predicate(node)
  check_nonzero_length_predicate(node)
end

def replacement(node)

def replacement(node)
  receiver = zero_length_receiver(node)
  return "#{receiver.source}.empty?" if receiver
  "!#{other_receiver(node).source}.empty?"
end