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