Class: Tapioca::Compilers::Args
- Defined in:
- sorbet/tapioca/compilers/args.rb
Constant Summary collapse
- GLOBAL_OPTIONS =
T.let( Homebrew::CLI::Parser..map do |short_option, long_option, _| [short_option, long_option].map { "#{Homebrew::CLI::Parser.option_to_name(_1)}?" } end.flatten.freeze, T::Array[String] )
- Parsable =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
T.type_alias { T.any(T.class_of(Homebrew::CLI::Args), T.class_of(Homebrew::AbstractCommand)) }
- ConstantType =
type_member { { fixed: Parsable } }
Class Method Summary collapse
- .gather_constants ⇒ Object private
Instance Method Summary collapse
- #args_table(parser) ⇒ Hash{Symbol => T.untyped} private
- #comma_arrays(parser) ⇒ Array<Symbol> private
- #decorate ⇒ void private
- #get_return_type(method_name, value, comma_array_methods) ⇒ String private
Class Method Details
.gather_constants ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
23 24 25 26 27 28 29 |
# File 'sorbet/tapioca/compilers/args.rb', line 23 def self.gather_constants # require all the commands to ensure the _arg methods are defined ["cmd", "dev-cmd"].each do |dir| Dir[File.join(__dir__, "../../../#{dir}", "*.rb")].each { require(_1) } end [Homebrew::CLI::Args] + Homebrew::AbstractCommand.subclasses end |
Instance Method Details
#args_table(parser) ⇒ Hash{Symbol => T.untyped}
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
53 54 55 56 |
# File 'sorbet/tapioca/compilers/args.rb', line 53 def args_table(parser) # we exclude non-args from the table, such as :named and :remaining parser.instance_variable_get(:@args).instance_variable_get(:@table).except(:named, :remaining) end |
#comma_arrays(parser) ⇒ Array<Symbol>
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
59 60 61 62 |
# File 'sorbet/tapioca/compilers/args.rb', line 59 def comma_arrays(parser) parser.instance_variable_get(:@non_global_processed_options) .filter_map { |k, v| parser.option_to_name(k).to_sym if v == :comma_array } end |
#decorate ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
This method returns an undefined value.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'sorbet/tapioca/compilers/args.rb', line 32 def decorate if constant == Homebrew::CLI::Args root.create_path(Homebrew::CLI::Args) do |klass| Homebrew.methods(false).select { _1.end_with?("_args") }.each do |args_method_name| parser = Homebrew.method(args_method_name).call create_args_methods(klass, parser) end end else cmd = T.cast(constant, T.class_of(Homebrew::AbstractCommand)) args_class_name = T.must(T.must(cmd.args_class).name) root.create_class(args_class_name, superclass_name: "Homebrew::CLI::Args") do |klass| create_args_methods(klass, cmd.parser) end root.create_path(constant) do |klass| klass.create_method("args", return_type: args_class_name) end end end |
#get_return_type(method_name, value, comma_array_methods) ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
65 66 67 68 69 70 71 72 73 |
# File 'sorbet/tapioca/compilers/args.rb', line 65 def get_return_type(method_name, value, comma_array_methods) if comma_array_methods.include?(method_name) "T.nilable(T::Array[String])" elsif [true, false].include?(value) "T::Boolean" else "T.nilable(String)" end end |