class Tapioca::Helpers::Test::DslCompiler::CompilerContext
def activate_other_dsl_compilers(compiler_classes)
def activate_other_dsl_compilers(compiler_classes) @other_compiler_classes = compiler_classes end
def activated_compiler_classes
def activated_compiler_classes [compiler_class, *other_compiler_classes] end
def errors
def errors pipeline.errors end
def gathered_constants
def gathered_constants compiler_class.processable_constants.filter_map(&:name).sort end
def initialize(compiler_class)
def initialize(compiler_class) @compiler_class = compiler_class @other_compiler_classes = T.let([], T::Array[T.class_of(Tapioca::Dsl::Compiler)]) @pipeline = T.let(nil, T.nilable(Tapioca::Dsl::Pipeline)) @errors = T.let([], T::Array[String]) end
def pipeline
def pipeline @pipeline ||= Tapioca::Dsl::Pipeline.new( requested_constants: [], requested_compilers: activated_compiler_classes, ) end
def rbi_for(constant_name, compiler_options: {})
def rbi_for(constant_name, compiler_options: {}) # Make sure this is a constant that we can handle. unless gathered_constants.include?(constant_name.to_s) raise "`#{constant_name}` is not processable by the `#{compiler_class}` compiler." end file = RBI::File.new(strictness: "strong") constant = Object.const_get(constant_name) compiler = compiler_class.new(pipeline, file.root, constant, compiler_options.transform_keys(&:to_s)) compiler.decorate rbi = Tapioca::DEFAULT_RBI_FORMATTER.print_file(file) result = sorbet( "--no-config", "--stop-after", "parser", "-e", "\"#{rbi}\"", ) unless result.status raise(SyntaxError, <<~MSG) Expected generated RBI file for `#{constant_name}` to not have any parsing errors. Got these parsing errors: #{result.err} MSG end rbi end