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