diff --git a/Library/Homebrew/dev-cmd/typecheck.rb b/Library/Homebrew/dev-cmd/typecheck.rb index 05aa183035..1bd80123a9 100644 --- a/Library/Homebrew/dev-cmd/typecheck.rb +++ b/Library/Homebrew/dev-cmd/typecheck.rb @@ -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" diff --git a/Library/Homebrew/sorbet/custom_generators/tty.rb b/Library/Homebrew/sorbet/custom_generators/tty.rb new file mode 100644 index 0000000000..ff5e22b985 --- /dev/null +++ b/Library/Homebrew/sorbet/custom_generators/tty.rb @@ -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 diff --git a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi index 4a224ee2ac..74f5553ffc 100644 --- a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi +++ b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi @@ -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 diff --git a/Library/Homebrew/utils/tty.rb b/Library/Homebrew/utils/tty.rb index b95317bbb8..97ee940256 100644 --- a/Library/Homebrew/utils/tty.rb +++ b/Library/Homebrew/utils/tty.rb @@ -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? diff --git a/Library/Homebrew/utils/tty.rbi b/Library/Homebrew/utils/tty.rbi new file mode 100644 index 0000000000..b92c259d6d --- /dev/null +++ b/Library/Homebrew/utils/tty.rbi @@ -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