lib/todo-rbi.rb
#!/usr/bin/env ruby # frozen_string_literal: true require 'json' require_relative './serialize' require_relative './step_interface' class Sorbet::Private::TodoRBI OUTPUT = 'sorbet/rbi/todo.rbi' HEADER = Sorbet::Private::Serialize.header('strong', 'todo') include Sorbet::Private::StepInterface def self.main File.delete(OUTPUT) if File.exist?(OUTPUT) IO.popen( [ File.realpath("#{__dir__}/../bin/srb"), 'tc', '--print=missing-constants', '--stdout-hup-hack', '--silence-dev-message', '--no-error-count', ], err: '/dev/null', ) do |io| missing_constants = io.read.split("\n") output = String.new output << HEADER missing_constants.each do |const| next if const.include?("<") || const.include?("class_of") output << "module #{const.gsub('T.untyped::', '')}; end\n" end File.write(OUTPUT, output) if output != HEADER end end def self.output_file OUTPUT end end if $PROGRAM_NAME == __FILE__ Sorbet::Private::TodoRBI.main end