class Utils::Grepper

def search

def search
  suffixes = Array(@args[?I])
  visit = -> filename {
    s  = filename.stat
    bn = filename.pathname.basename
    if !s ||
        s.directory? && @config.search.prune?(bn) ||
        s.file? && @config.search.skip?(bn)
    then
      @args[?v] and warn "Pruning #{filename.inspect}."
      prune
    elsif suffixes.empty?
      true
    else
      suffixes.include?(filename.suffix)
    end
  }
  find(*@roots, visit: visit) do |filename|
    match(filename)
  end
  @paths = @paths.sort_by(&:source_location)
  self
end