Convert the utils/tty RBI generator to a Tapioca compiler
				
					
				
			- The preferred way of doing RBI generation is via Tapioca. So I am trying to stop being intimidated by it, by learning how it works. - This is very WIP still, currently failing with the following message because the `module` name is missing in the generated RBI file. ``` There are parse errors in the generated RBI files. Errors: sorbet/rbi/dsl/tty.rbi:8: unexpected token tNL (2001) sorbet/rbi/dsl/tty.rbi:64: unexpected token "end" (2001) ```
This commit is contained in:
		
							parent
							
								
									c3094acbaf
								
							
						
					
					
						commit
						05b716613b
					
				@ -51,7 +51,6 @@ module Homebrew
 | 
			
		||||
            tapioca_args = args.update_all? ? ["--all"] : []
 | 
			
		||||
 | 
			
		||||
            ohai "Updating homegrown RBI files..."
 | 
			
		||||
            safe_system "bundle", "exec", "ruby", "sorbet/custom_generators/tty.rb"
 | 
			
		||||
            safe_system "bundle", "exec", "ruby", "sorbet/custom_generators/env_config.rb"
 | 
			
		||||
 | 
			
		||||
            ohai "Updating Tapioca RBI files..."
 | 
			
		||||
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
# typed: true
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require_relative "../../global"
 | 
			
		||||
require_relative "../../env_config"
 | 
			
		||||
require_relative "../../utils/tty"
 | 
			
		||||
 | 
			
		||||
File.open("#{File.dirname(__FILE__)}/../../utils/tty.rbi", "w") do |file|
 | 
			
		||||
  file.write(<<~RUBY)
 | 
			
		||||
    # typed: strict
 | 
			
		||||
 | 
			
		||||
    module Tty
 | 
			
		||||
  RUBY
 | 
			
		||||
 | 
			
		||||
  dynamic_methods = Tty::COLOR_CODES.keys + Tty::STYLE_CODES.keys + Tty::SPECIAL_CODES.keys
 | 
			
		||||
  methods = Tty.methods(false).sort.select { |method| dynamic_methods.include?(method) }
 | 
			
		||||
 | 
			
		||||
  methods.each do |method|
 | 
			
		||||
    return_type = (method.to_s.end_with?("?") ? T::Boolean : String)
 | 
			
		||||
    signature = "sig { returns(#{return_type}) }"
 | 
			
		||||
 | 
			
		||||
    file.write(<<-RUBY)
 | 
			
		||||
  #{signature}
 | 
			
		||||
  def self.#{method}; end
 | 
			
		||||
    RUBY
 | 
			
		||||
 | 
			
		||||
    file.write("\n") if methods.last != method
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  file.write("end\n")
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										64
									
								
								Library/Homebrew/sorbet/rbi/dsl/tty.rbi
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								Library/Homebrew/sorbet/rbi/dsl/tty.rbi
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,64 @@
 | 
			
		||||
# typed: true
 | 
			
		||||
 | 
			
		||||
# DO NOT EDIT MANUALLY
 | 
			
		||||
# This is an autogenerated file for dynamic methods in `Tty`.
 | 
			
		||||
# Please instead update this file by running `bin/tapioca dsl Tty`.
 | 
			
		||||
 | 
			
		||||
module 
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def blue; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def bold; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def cyan; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def default; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def down; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def erase_char; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def erase_line; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def green; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def italic; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def left; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def magenta; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def no_underline; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def red; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def reset; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def right; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def strikethrough; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def underline; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def up; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def yellow; end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										31
									
								
								Library/Homebrew/sorbet/tapioca/compilers/tty.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Library/Homebrew/sorbet/tapioca/compilers/tty.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
# typed: strict
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require_relative "../../../global"
 | 
			
		||||
require_relative "../../../utils/tty"
 | 
			
		||||
 | 
			
		||||
module Tapioca
 | 
			
		||||
  module Compilers
 | 
			
		||||
    class Tty < Tapioca::Dsl::Compiler
 | 
			
		||||
      ConstantType = type_member { { fixed: Module } }
 | 
			
		||||
 | 
			
		||||
      sig { override.returns(T::Enumerable[Module]) }
 | 
			
		||||
      def self.gather_constants
 | 
			
		||||
       [::Tty]
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sig { override.void }
 | 
			
		||||
      def decorate
 | 
			
		||||
        root.create_path(constant) do |klass|
 | 
			
		||||
          dynamic_methods = ::Tty::COLOR_CODES.keys + ::Tty::STYLE_CODES.keys + ::Tty::SPECIAL_CODES.keys
 | 
			
		||||
          methods = ::Tty.methods(false).sort.select { |method| dynamic_methods.include?(method) }
 | 
			
		||||
 | 
			
		||||
          methods.each do |method|
 | 
			
		||||
            return_type = (method.to_s.end_with?("?") ? "T::Boolean" : "String")
 | 
			
		||||
            klass.create_method(method.to_s, return_type:)
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,60 +0,0 @@
 | 
			
		||||
# typed: strict
 | 
			
		||||
 | 
			
		||||
module Tty
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.blue; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.bold; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.cyan; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.default; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.down; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.erase_char; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.erase_line; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.green; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.italic; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.left; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.magenta; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.no_underline; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.red; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.reset; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.right; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.strikethrough; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.underline; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.up; end
 | 
			
		||||
 | 
			
		||||
  sig { returns(String) }
 | 
			
		||||
  def self.yellow; end
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user