sorbet: Autogenerate the RBI file for utils/tty.rb
				
					
				
			- Sort of. It's not via Parlour, because I read the docs and all it says about dynamically generating things is "of course it's better to do that", no examples. I tried my best, but Bo's work on `attr.rb` was mind-boggling. - Instead, let's add a simple but functional generator script that I actually understand, as an alternative to maintaining these RBI files for dynamic methods manually, so that we can get rid of some use of `srb rbi hidden-definitions` since that's deprecated. - TODO: Run this script as part of `brew typecheck --update` so it gets updated with all the other RBI files periodically. - Follow up to PR 14651.
This commit is contained in:
		
							parent
							
								
									19a696fc8f
								
							
						
					
					
						commit
						1295904986
					
				
							
								
								
									
										30
									
								
								Library/Homebrew/sorbet/custom_generators/tty.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Library/Homebrew/sorbet/custom_generators/tty.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
# typed: true
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require_relative "../../utils/tty"
 | 
			
		||||
 | 
			
		||||
File.open("#{File.dirname(__FILE__)}/../../utils/tty.rbi", "w") do |file|
 | 
			
		||||
  file.write(<<~RUBY)
 | 
			
		||||
    # typed: strict
 | 
			
		||||
    # frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
    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") unless methods.last == method
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  file.write("end\n")
 | 
			
		||||
end
 | 
			
		||||
@ -8488,46 +8488,6 @@ class TracePoint
 | 
			
		||||
  def parameters(); end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
module Tty
 | 
			
		||||
  def self.blue(); end
 | 
			
		||||
 | 
			
		||||
  def self.bold(); end
 | 
			
		||||
 | 
			
		||||
  def self.cyan(); end
 | 
			
		||||
 | 
			
		||||
  def self.default(); end
 | 
			
		||||
 | 
			
		||||
  def self.down(); end
 | 
			
		||||
 | 
			
		||||
  def self.erase_char(); end
 | 
			
		||||
 | 
			
		||||
  def self.erase_line(); end
 | 
			
		||||
 | 
			
		||||
  def self.green(); end
 | 
			
		||||
 | 
			
		||||
  def self.italic(); end
 | 
			
		||||
 | 
			
		||||
  def self.left(); end
 | 
			
		||||
 | 
			
		||||
  def self.magenta(); end
 | 
			
		||||
 | 
			
		||||
  def self.no_underline(); end
 | 
			
		||||
 | 
			
		||||
  def self.red(); end
 | 
			
		||||
 | 
			
		||||
  def self.reset(); end
 | 
			
		||||
 | 
			
		||||
  def self.right(); end
 | 
			
		||||
 | 
			
		||||
  def self.strikethrough(); end
 | 
			
		||||
 | 
			
		||||
  def self.underline(); end
 | 
			
		||||
 | 
			
		||||
  def self.up(); end
 | 
			
		||||
 | 
			
		||||
  def self.yellow(); end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
module URI
 | 
			
		||||
  include ::URI::RFC2396_REGEXP
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,36 @@ require "env_config"
 | 
			
		||||
module Tty
 | 
			
		||||
  @stream = $stdout
 | 
			
		||||
 | 
			
		||||
  COLOR_CODES = {
 | 
			
		||||
    red:     31,
 | 
			
		||||
    green:   32,
 | 
			
		||||
    yellow:  33,
 | 
			
		||||
    blue:    34,
 | 
			
		||||
    magenta: 35,
 | 
			
		||||
    cyan:    36,
 | 
			
		||||
    default: 39,
 | 
			
		||||
  }.freeze
 | 
			
		||||
 | 
			
		||||
  STYLE_CODES = {
 | 
			
		||||
    reset:         0,
 | 
			
		||||
    bold:          1,
 | 
			
		||||
    italic:        3,
 | 
			
		||||
    underline:     4,
 | 
			
		||||
    strikethrough: 9,
 | 
			
		||||
    no_underline:  24,
 | 
			
		||||
  }.freeze
 | 
			
		||||
 | 
			
		||||
  SPECIAL_CODES = {
 | 
			
		||||
    up:         "1A",
 | 
			
		||||
    down:       "1B",
 | 
			
		||||
    right:      "1C",
 | 
			
		||||
    left:       "1D",
 | 
			
		||||
    erase_line: "K",
 | 
			
		||||
    erase_char: "P",
 | 
			
		||||
  }.freeze
 | 
			
		||||
 | 
			
		||||
  CODES = COLOR_CODES.merge(STYLE_CODES).freeze
 | 
			
		||||
 | 
			
		||||
  class << self
 | 
			
		||||
    extend T::Sig
 | 
			
		||||
 | 
			
		||||
@ -42,36 +72,6 @@ module Tty
 | 
			
		||||
      (w = width).zero? ? string.to_s : (string.to_s[0, w - 4] || "")
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    COLOR_CODES = {
 | 
			
		||||
      red:     31,
 | 
			
		||||
      green:   32,
 | 
			
		||||
      yellow:  33,
 | 
			
		||||
      blue:    34,
 | 
			
		||||
      magenta: 35,
 | 
			
		||||
      cyan:    36,
 | 
			
		||||
      default: 39,
 | 
			
		||||
    }.freeze
 | 
			
		||||
 | 
			
		||||
    STYLE_CODES = {
 | 
			
		||||
      reset:         0,
 | 
			
		||||
      bold:          1,
 | 
			
		||||
      italic:        3,
 | 
			
		||||
      underline:     4,
 | 
			
		||||
      strikethrough: 9,
 | 
			
		||||
      no_underline:  24,
 | 
			
		||||
    }.freeze
 | 
			
		||||
 | 
			
		||||
    SPECIAL_CODES = {
 | 
			
		||||
      up:         "1A",
 | 
			
		||||
      down:       "1B",
 | 
			
		||||
      right:      "1C",
 | 
			
		||||
      left:       "1D",
 | 
			
		||||
      erase_line: "K",
 | 
			
		||||
      erase_char: "P",
 | 
			
		||||
    }.freeze
 | 
			
		||||
 | 
			
		||||
    CODES = COLOR_CODES.merge(STYLE_CODES).freeze
 | 
			
		||||
 | 
			
		||||
    sig { returns(String) }
 | 
			
		||||
    def current_escape_sequence
 | 
			
		||||
      return "" if @escape_sequence.nil?
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										60
									
								
								Library/Homebrew/utils/tty.rbi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Library/Homebrew/utils/tty.rbi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
# 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