Merge pull request #16899 from Homebrew/tapioca-compiler-for-tty-rbi

Convert the `utils/tty` RBI generator to a Tapioca compiler
This commit is contained in:
Issy Long 2024-03-30 18:10:41 +00:00 committed by GitHub
commit a3932b44c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 96 additions and 92 deletions

View File

@ -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..."

View File

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

66
Library/Homebrew/sorbet/rbi/dsl/tty.rbi generated Normal file
View File

@ -0,0 +1,66 @@
# 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 Tty
class << self
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
end

View File

@ -0,0 +1,30 @@
# typed: strict
# frozen_string_literal: true
require_relative "../../../global"
require "utils/tty"
module Tapioca
module Compilers
class Tty < Tapioca::Dsl::Compiler
# FIXME: Enable cop again when https://github.com/sorbet/sorbet/issues/3532 is fixed.
# rubocop:disable Style/MutableConstant
ConstantType = type_member { { fixed: Module } }
# rubocop:enable Style/MutableConstant
sig { override.returns(T::Enumerable[Module]) }
def self.gather_constants = [::Tty]
sig { override.void }
def decorate
root.create_module(T.must(constant.name)) do |mod|
dynamic_methods = ::Tty::COLOR_CODES.keys + ::Tty::STYLE_CODES.keys + ::Tty::SPECIAL_CODES.keys
dynamic_methods.each do |method|
mod.create_method(method.to_s, return_type: "String", class_method: true)
end
end
end
end
end
end

View File

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