class RuboCop::Cop::Style::ZeroLengthPredicate
This cop checks for numeric comparisons that can be replaced by a predicate method, such as receiver.length == 0, receiver.length > 0, receiver.length != 0, receiver.length < 1 and receiver.size == 0 that can be replaced by receiver.empty? and !receiver.empty?.
@example
# bad [1, 2, 3].length == 0 0 == "foobar".length array.length < 1 {a: 1, b: 2}.length != 0 string.length > 0 hash.size > 0 # good [1, 2, 3].empty? "foobar".empty? array.empty? !{a: 1, b: 2}.empty? !string.empty? !hash.empty?
Constants
- NONZERO_MSG
- ZERO_MSG
Public Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/style/zero_length_predicate.rb, line 38 def autocorrect(node) lambda do |corrector| corrector.replace(node.loc.expression, replacement(node)) end end
on_send(node)
click to toggle source
# File lib/rubocop/cop/style/zero_length_predicate.rb, line 33 def on_send(node) check_zero_length_predicate(node) check_nonzero_length_predicate(node) end
Private Instance Methods
check_nonzero_length_predicate(node)
click to toggle source
# File lib/rubocop/cop/style/zero_length_predicate.rb, line 61 def check_nonzero_length_predicate(node) nonzero_length_predicate = nonzero_length_predicate(node) return unless nonzero_length_predicate lhs, opr, rhs = nonzero_length_predicate return if non_polymorphic_collection?(node) add_offense( node, message: format(NONZERO_MSG, lhs: lhs, opr: opr, rhs: rhs) ) end
check_zero_length_predicate(node)
click to toggle source
# File lib/rubocop/cop/style/zero_length_predicate.rb, line 46 def check_zero_length_predicate(node) zero_length_predicate = zero_length_predicate(node) return unless zero_length_predicate lhs, opr, rhs = zero_length_predicate return if non_polymorphic_collection?(node) add_offense( node, message: format(ZERO_MSG, lhs: lhs, opr: opr, rhs: rhs) ) end
replacement(node)
click to toggle source
# File lib/rubocop/cop/style/zero_length_predicate.rb, line 88 def replacement(node) receiver = zero_length_receiver(node) return "#{receiver.source}.empty?" if receiver "!#{other_receiver(node).source}.empty?" end