2021-07-27 04:44:24 +01:00
|
|
|
# typed: true
|
2021-07-27 05:12:15 +01:00
|
|
|
# frozen_string_literal: true
|
2021-07-27 04:44:24 +01:00
|
|
|
|
2023-04-24 19:13:49 -07:00
|
|
|
require_relative "../extend/module"
|
2021-07-27 04:44:24 +01:00
|
|
|
require_relative "../warnings"
|
|
|
|
Warnings.ignore :parser_syntax do
|
|
|
|
require "parser/current"
|
|
|
|
end
|
|
|
|
|
|
|
|
module Homebrew
|
2021-07-27 05:12:15 +01:00
|
|
|
# Parlour type signature generator helper class for Homebrew.
|
2021-07-27 04:44:24 +01:00
|
|
|
module Parlour
|
2023-11-05 08:55:58 -08:00
|
|
|
ROOT_DIR = T.let(Pathname(T.must(__dir__)).parent.realpath.freeze, Pathname).freeze
|
2021-07-27 04:44:24 +01:00
|
|
|
|
|
|
|
sig { returns(T::Array[Parser::AST::Node]) }
|
|
|
|
def self.ast_list
|
2021-07-27 05:12:15 +01:00
|
|
|
@ast_list ||= begin
|
2021-07-27 04:44:24 +01:00
|
|
|
ast_list = []
|
|
|
|
parser = Parser::CurrentRuby.new
|
2021-07-27 05:12:15 +01:00
|
|
|
prune_dirs = %w[sorbet shims test vendor].freeze
|
2021-07-27 04:44:24 +01:00
|
|
|
|
|
|
|
ROOT_DIR.find do |path|
|
2021-07-27 05:12:15 +01:00
|
|
|
Find.prune if path.directory? && prune_dirs.any? { |subdir| path == ROOT_DIR/subdir }
|
2021-07-27 04:44:24 +01:00
|
|
|
|
|
|
|
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"
|