diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/cli/args.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cli/args.rbi index c88f445543..d31956ed1e 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/homebrew/cli/args.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cli/args.rbi @@ -401,9 +401,6 @@ class Homebrew::CLI::Args sig { returns(T.nilable(String)) } def keyboard_layoutdir; end - sig { returns(T::Boolean) } - def l?; end - sig { returns(T.nilable(T::Array[String])) } def language; end @@ -461,9 +458,6 @@ class Homebrew::CLI::Args sig { returns(T::Boolean) } def missing?; end - sig { returns(T::Boolean) } - def multiple?; end - sig { returns(T.nilable(String)) } def n; end @@ -578,9 +572,6 @@ class Homebrew::CLI::Args sig { returns(T::Boolean) } def perl?; end - sig { returns(T::Boolean) } - def pinned?; end - sig { returns(T::Boolean) } def plain?; end @@ -752,9 +743,6 @@ class Homebrew::CLI::Args sig { returns(T::Boolean) } def skip_style?; end - sig { returns(T::Boolean) } - def stackprof?; end - sig { returns(T.nilable(String)) } def start_with; end @@ -773,9 +761,6 @@ class Homebrew::CLI::Args sig { returns(T::Boolean) } def syntax?; end - sig { returns(T::Boolean) } - def t?; end - sig { returns(T.nilable(String)) } def tag; end @@ -857,9 +842,6 @@ class Homebrew::CLI::Args sig { returns(T.nilable(String)) } def version_intel; end - sig { returns(T::Boolean) } - def versions?; end - sig { returns(T.nilable(String)) } def vst3_plugindir; end diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/list.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/list.rbi new file mode 100644 index 0000000000..d9fc1c041d --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/list.rbi @@ -0,0 +1,64 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This is an autogenerated file for dynamic methods in `Homebrew::Cmd::List`. +# Please instead update this file by running `bin/tapioca dsl Homebrew::Cmd::List`. + +class Homebrew::CLI::Args + sig { returns(T::Boolean) } + def cask?; end + + sig { returns(T::Boolean) } + def casks?; end + + sig { returns(T::Boolean) } + def d?; end + + sig { returns(T::Boolean) } + def debug?; end + + sig { returns(T::Boolean) } + def formula?; end + + sig { returns(T::Boolean) } + def formulae?; end + + sig { returns(T::Boolean) } + def full_name?; end + + sig { returns(T::Boolean) } + def h?; end + + sig { returns(T::Boolean) } + def help?; end + + sig { returns(T::Boolean) } + def l?; end + + sig { returns(T::Boolean) } + def multiple?; end + + sig { returns(T::Boolean) } + def pinned?; end + + sig { returns(T::Boolean) } + def q?; end + + sig { returns(T::Boolean) } + def quiet?; end + + sig { returns(T::Boolean) } + def r?; end + + sig { returns(T::Boolean) } + def t?; end + + sig { returns(T::Boolean) } + def v?; end + + sig { returns(T::Boolean) } + def verbose?; end + + sig { returns(T::Boolean) } + def versions?; end +end diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/prof.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/prof.rbi new file mode 100644 index 0000000000..9083195ef5 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/prof.rbi @@ -0,0 +1,34 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This is an autogenerated file for dynamic methods in `Homebrew::DevCmd::Prof`. +# Please instead update this file by running `bin/tapioca dsl Homebrew::DevCmd::Prof`. + +class Homebrew::CLI::Args + sig { returns(T::Boolean) } + def d?; end + + sig { returns(T::Boolean) } + def debug?; end + + sig { returns(T::Boolean) } + def h?; end + + sig { returns(T::Boolean) } + def help?; end + + sig { returns(T::Boolean) } + def q?; end + + sig { returns(T::Boolean) } + def quiet?; end + + sig { returns(T::Boolean) } + def stackprof?; end + + sig { returns(T::Boolean) } + def v?; end + + sig { returns(T::Boolean) } + def verbose?; end +end diff --git a/Library/Homebrew/sorbet/tapioca/compilers/args.rb b/Library/Homebrew/sorbet/tapioca/compilers/args.rb index 5a226f1eaa..df47ba41ee 100644 --- a/Library/Homebrew/sorbet/tapioca/compilers/args.rb +++ b/Library/Homebrew/sorbet/tapioca/compilers/args.rb @@ -16,34 +16,34 @@ module Tapioca # FIXME: Enable cop again when https://github.com/sorbet/sorbet/issues/3532 is fixed. # rubocop:disable Style/MutableConstant + Parsable = T.type_alias { T.any(T.class_of(Homebrew::CLI::Args), T.class_of(Homebrew::AbstractCommand)) } ConstantType = type_member { { fixed: T.class_of(Homebrew::CLI::Args) } } # rubocop:enable Style/MutableConstant - sig { override.returns(T::Enumerable[T.class_of(Homebrew::CLI::Args)]) } + sig { override.returns(T::Enumerable[Parsable]) } 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::CLI::Args] + Homebrew::AbstractCommand.subclasses end sig { override.void } def decorate - root.create_path(Homebrew::CLI::Args) do |klass| - Homebrew.methods(false).select { _1.end_with?("_args") }.each do |args_method_name| - next if NON_PARSER_ARGS_METHODS.include?(args_method_name) + 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| + next if NON_PARSER_ARGS_METHODS.include?(args_method_name) - parser = Homebrew.method(args_method_name).call - comma_array_methods = comma_arrays(parser) - args_table(parser).each do |method_name, value| - # some args are used in multiple commands (this is ok as long as they have the same type) - next if klass.nodes.any? { T.cast(_1, RBI::Method).name.to_sym == method_name } - - return_type = get_return_type(method_name, value, comma_array_methods) - klass.create_method(method_name.to_s, return_type:) + parser = Homebrew.method(args_method_name).call + create_args_methods(klass, parser) end end + else + root.create_path(Homebrew::CLI::Args) do |klass| + create_args_methods(klass, constant.parser) + end end end @@ -69,6 +69,20 @@ module Tapioca "T.nilable(String)" end end + + private + + sig { params(klass: RBI::Scope, parser: Homebrew::CLI::Parser).void } + def create_args_methods(klass, parser) + comma_array_methods = comma_arrays(parser) + args_table(parser).each do |method_name, value| + # some args are used in multiple commands (this is ok as long as they have the same type) + next if klass.nodes.any? { T.cast(_1, RBI::Method).name == method_name } + + return_type = get_return_type(method_name, value, comma_array_methods) + klass.create_method(method_name, return_type:) + end + end end end end