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"] : []
|
tapioca_args = args.update_all? ? ["--all"] : []
|
||||||
|
|
||||||
ohai "Updating homegrown RBI files..."
|
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"
|
safe_system "bundle", "exec", "ruby", "sorbet/custom_generators/env_config.rb"
|
||||||
|
|
||||||
ohai "Updating Tapioca RBI files..."
|
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