2023-11-05 08:55:58 -08:00

44 lines
1.1 KiB
Ruby

# typed: true
# frozen_string_literal: true
require_relative "../extend/module"
require_relative "../warnings"
Warnings.ignore :parser_syntax do
require "parser/current"
end
module Homebrew
# Parlour type signature generator helper class for Homebrew.
module Parlour
ROOT_DIR = T.let(Pathname(T.must(__dir__)).parent.realpath.freeze, Pathname).freeze
sig { returns(T::Array[Parser::AST::Node]) }
def self.ast_list
@ast_list ||= begin
ast_list = []
parser = Parser::CurrentRuby.new
prune_dirs = %w[sorbet shims test vendor].freeze
ROOT_DIR.find do |path|
Find.prune if path.directory? && prune_dirs.any? { |subdir| path == ROOT_DIR/subdir }
Find.prune if path.file? && path.extname != ".rb"
next unless path.file?
buffer = Parser::Source::Buffer.new(path, source: path.read)
parser.reset
ast = parser.parse(buffer)
ast_list << ast if ast
end
ast_list
end
end
end
end
require "parlour"
require_relative "parlour/attr"