Merge pull request #14896 from issyl0/sorbet-autogenerate-tty-rbi

sorbet: Autogenerate the RBI file for `utils/tty.rb`
This commit is contained in:
Mike McQuaid 2023-03-07 09:23:02 +00:00 committed by GitHub
commit a6b70eee69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 124 additions and 70 deletions

View File

@ -64,6 +64,9 @@ module Homebrew
tapioca_args = ["--exclude", *excluded_gems, "--typed-overrides", *typed_overrides]
tapioca_args << "--all" if args.update_all?
ohai "Updating homegrown RBI files..."
safe_system "bundle", "exec", "ruby", "sorbet/custom_generators/tty.rb"
ohai "Updating Tapioca RBI files..."
safe_system "bundle", "exec", "tapioca", "gem", *tapioca_args
safe_system "bundle", "exec", "parlour"

View File

@ -0,0 +1,31 @@
# 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") unless methods.last == method
end
file.write("end\n")
end

View File

@ -8492,46 +8492,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

View File

@ -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?

View 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