mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
44 lines
1.1 KiB
Ruby
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"
|