class RuboCop::Cop::Style::BitwisePredicate
variable.nobits?(flags)
# good
(variable & flags).zero?
# bad - checks no set bits
variable.allbits?(flags)
# good
(variable & flags) == flags
# bad - checks all set bits
variable.anybits?(flags)
# good
(variable & flags).positive?
# bad - checks any set bits
@example
is not an ‘Integer` object.
This cop is unsafe, as it can produce false positives if the receiver
@safety
Prefer bitwise predicate methods over direct comparison operations.
def on_send(node)
def on_send(node) return unless node.receiver&.begin_type? return unless (preferred_method = preferred_method(node)) bit_operation = node.receiver.children.first lhs, _operator, rhs = *bit_operation preferred = "#{lhs.source}.#{preferred_method}(#{rhs.source})" add_offense(node, message: format(MSG, preferred: preferred)) do |corrector| corrector.replace(node, preferred) end end
def preferred_method(node)
def preferred_method(node) if anybits?(node) 'anybits?' elsif allbits?(node) 'allbits?' elsif nobits?(node) 'nobits?' end end