class RuboCop::Cop::Sorbet::SelectByIsA

strings_or_integers.grep(String)
# good
strings_or_integers.select { |e| e.kind_of?(String) }
strings_or_integers.filter { |e| e.is_a?(String) }
strings_or_integers.select { |e| e.is_a?(String) }
# bad
@example
Suggests using ‘grep` over `select` when using it only for type narrowing.

def on_send(node)

def on_send(node)
  block_node = node.block_node
  return unless block_node
  return unless type_narrowing_select?(block_node)
  add_offense(block_node) do |corrector|
    receiver = node.receiver
    type_class = block_node.body.children[2]
    navigation = node.csend_type? ? "&." : "."
    replacement = "#{receiver.source}#{navigation}grep(#{type_class.source})"
    corrector.replace(block_node, replacement)
  end
end