diff --git a/Library/Homebrew/dev-cmd/typecheck.rb b/Library/Homebrew/dev-cmd/typecheck.rb index 1bd80123a9..0554a39f38 100644 --- a/Library/Homebrew/dev-cmd/typecheck.rb +++ b/Library/Homebrew/dev-cmd/typecheck.rb @@ -66,6 +66,7 @@ module Homebrew 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..." safe_system "bundle", "exec", "tapioca", "gem", *tapioca_args diff --git a/Library/Homebrew/env_config.rbi b/Library/Homebrew/env_config.rbi index a822719989..e36f4ee557 100644 --- a/Library/Homebrew/env_config.rbi +++ b/Library/Homebrew/env_config.rbi @@ -1,7 +1,240 @@ # typed: strict module Homebrew::EnvConfig - # This is necessary due to https://github.com/sorbet/sorbet/issues/6726 sig { returns(String) } + def self.additional_google_analytics_id; end + + sig { returns(String) } + def self.all_proxy; end + + sig { returns(Integer) } def self.api_auto_update_secs; end + + sig { returns(String) } + def self.api_domain; end + + sig { returns(String) } + def self.arch; end + + sig { returns(String) } + def self.artifact_domain; end + + sig { returns(String) } + def self.auto_update_secs; end + + sig { returns(T::Boolean) } + def self.autoremove?; end + + sig { returns(T::Boolean) } + def self.bat?; end + + sig { returns(String) } + def self.bat_config_path; end + + sig { returns(String) } + def self.bat_theme; end + + sig { returns(T::Boolean) } + def self.bootsnap?; end + + sig { returns(String) } + def self.bottle_domain; end + + sig { returns(String) } + def self.brew_git_remote; end + + sig { returns(T.nilable(String)) } + def self.browser; end + + sig { returns(String) } + def self.cache; end + + sig { returns(Integer) } + def self.cleanup_max_age_days; end + + sig { returns(Integer) } + def self.cleanup_periodic_full_days; end + + sig { returns(T::Boolean) } + def self.color?; end + + sig { returns(String) } + def self.core_git_remote; end + + sig { returns(String) } + def self.curl_path; end + + sig { returns(Integer) } + def self.curl_retries; end + + sig { returns(T::Boolean) } + def self.curl_verbose?; end + + sig { returns(T::Boolean) } + def self.curlrc?; end + + sig { returns(T::Boolean) } + def self.debug?; end + + sig { returns(T::Boolean) } + def self.developer?; end + + sig { returns(T::Boolean) } + def self.disable_load_formula?; end + + sig { returns(String) } + def self.display; end + + sig { returns(T::Boolean) } + def self.display_install_times?; end + + sig { returns(String) } + def self.docker_registry_basic_auth_token; end + + sig { returns(String) } + def self.docker_registry_token; end + + sig { returns(T.nilable(String)) } + def self.editor; end + + sig { returns(T::Boolean) } + def self.eval_all?; end + + sig { returns(Integer) } + def self.fail_log_lines; end + + sig { returns(String) } + def self.forbidden_licenses; end + + sig { returns(T::Boolean) } + def self.force_brewed_ca_certificates?; end + + sig { returns(T::Boolean) } + def self.force_brewed_curl?; end + + sig { returns(T::Boolean) } + def self.force_brewed_git?; end + + sig { returns(T::Boolean) } + def self.force_vendor_ruby?; end + + sig { returns(String) } + def self.ftp_proxy; end + + sig { returns(String) } + def self.git_email; end + + sig { returns(String) } + def self.git_name; end + + sig { returns(String) } + def self.git_path; end + + sig { returns(T.nilable(String)) } + def self.github_api_token; end + + sig { returns(String) } + def self.github_packages_token; end + + sig { returns(String) } + def self.github_packages_user; end + + sig { returns(String) } + def self.http_proxy; end + + sig { returns(String) } + def self.https_proxy; end + + sig { returns(String) } + def self.install_badge; end + + sig { returns(String) } + def self.livecheck_watchlist; end + + sig { returns(String) } + def self.logs; end + + sig { returns(T::Boolean) } + def self.no_analytics?; end + + sig { returns(T::Boolean) } + def self.no_auto_update?; end + + sig { returns(T::Boolean) } + def self.no_bootsnap?; end + + sig { returns(String) } + def self.no_cleanup_formulae; end + + sig { returns(T::Boolean) } + def self.no_color?; end + + sig { returns(T::Boolean) } + def self.no_compat?; end + + sig { returns(T::Boolean) } + def self.no_emoji?; end + + sig { returns(T::Boolean) } + def self.no_env_hints?; end + + sig { returns(T::Boolean) } + def self.no_github_api?; end + + sig { returns(T::Boolean) } + def self.no_google_analytics?; end + + sig { returns(T::Boolean) } + def self.no_insecure_redirect?; end + + sig { returns(T::Boolean) } + def self.no_install_cleanup?; end + + sig { returns(T::Boolean) } + def self.no_install_from_api?; end + + sig { returns(T::Boolean) } + def self.no_install_upgrade?; end + + sig { returns(T::Boolean) } + def self.no_installed_dependents_check?; end + + sig { returns(String) } + def self.no_proxy; end + + sig { returns(String) } + def self.pip_index_url; end + + sig { returns(T::Boolean) } + def self.pry?; end + + sig { returns(T::Boolean) } + def self.simulate_macos_on_linux?; end + + sig { returns(T::Boolean) } + def self.skip_or_later_bottles?; end + + sig { returns(T::Boolean) } + def self.sorbet_runtime?; end + + sig { returns(String) } + def self.ssh_config_path; end + + sig { returns(String) } + def self.sudo_askpass; end + + sig { returns(String) } + def self.svn; end + + sig { returns(String) } + def self.temp; end + + sig { returns(T::Boolean) } + def self.update_to_tag?; end + + sig { returns(T::Boolean) } + def self.verbose?; end + + sig { returns(T::Boolean) } + def self.verbose_using_dots?; end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index f1cb4090d3..93c3b6e220 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2517,7 +2517,7 @@ class Formula $stdout.flush unless $CHILD_STATUS.success? - log_lines = Homebrew::EnvConfig.fail_log_lines + log_lines = Homebrew::EnvConfig.fail_log_lines.to_s log.flush if !verbose? || verbose_using_dots diff --git a/Library/Homebrew/sorbet/custom_generators/env_config.rb b/Library/Homebrew/sorbet/custom_generators/env_config.rb new file mode 100644 index 0000000000..04660796ba --- /dev/null +++ b/Library/Homebrew/sorbet/custom_generators/env_config.rb @@ -0,0 +1,46 @@ +# typed: true +# frozen_string_literal: true + +require_relative "../../global" +require_relative "../../env_config" + +def nilable?(method) + %w[browser editor github_api_token].include?(method) +end + +File.open("#{File.dirname(__FILE__)}/../../env_config.rbi", "w") do |file| + file.write(<<~RUBY) + # typed: strict + + module Homebrew::EnvConfig + RUBY + + dynamic_methods = {} + Homebrew::EnvConfig::ENVS.each do |env, hash| + next if Homebrew::EnvConfig::CUSTOM_IMPLEMENTATIONS.include?(env.to_s) + + name = Homebrew::EnvConfig.env_method_name(env, hash) + dynamic_methods[name] = { default: hash[:default] } + end + + methods = Homebrew::EnvConfig.methods(false).map(&:to_s).sort.select { |method| dynamic_methods.key?(method) } + + methods.each do |method| + return_type = if method.end_with?("?") + T::Boolean + elsif dynamic_methods[method][:default].instance_of?(Integer) + Integer + else + nilable?(method) ? T.nilable(String) : String + end + + file.write(<<-RUBY) + sig { returns(#{return_type}) } + 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 03863445a3..6ccdcd9075 100644 --- a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi +++ b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi @@ -4266,162 +4266,6 @@ class Homebrew::Completions::Variables def self.members(); end end -module Homebrew::EnvConfig - def self.additional_google_analytics_id(); end - - def self.all_proxy(); end - - def self.api_domain(); end - - def self.arch(); end - - def self.artifact_domain(); end - - def self.auto_update_secs(); end - - def self.autoremove?(); end - - def self.bat?(); end - - def self.bat_config_path(); end - - def self.bat_theme(); end - - def self.bootsnap?(); end - - def self.bottle_domain(); end - - def self.brew_git_remote(); end - - def self.browser(); end - - def self.cache(); end - - def self.cleanup_max_age_days(); end - - def self.cleanup_periodic_full_days(); end - - def self.color?(); end - - def self.core_git_remote(); end - - def self.curl_retries(); end - - def self.curl_verbose?(); end - - def self.curlrc?(); end - - def self.debug?(); end - - def self.developer?(); end - - def self.disable_load_formula?(); end - - def self.display(); end - - def self.display_install_times?(); end - - def self.docker_registry_basic_auth_token(); end - - def self.docker_registry_token(); end - - def self.editor(); end - - def self.eval_all?(); end - - def self.fail_log_lines(); end - - def self.forbidden_licenses(); end - - def self.force_brewed_ca_certificates?(); end - - def self.force_brewed_curl?(); end - - def self.force_brewed_git?(); end - - def self.force_vendor_ruby?(); end - - def self.ftp_proxy(); end - - def self.git_email(); end - - def self.git_name(); end - - def self.git_path(); end - - def self.github_api_token(); end - - def self.github_packages_token(); end - - def self.github_packages_user(); end - - def self.http_proxy(); end - - def self.https_proxy(); end - - def self.install_badge(); end - - def self.livecheck_watchlist(); end - - def self.logs(); end - - def self.no_analytics?(); end - - def self.no_auto_update?(); end - - def self.no_bootsnap?(); end - - def self.no_cleanup_formulae(); end - - def self.no_color?(); end - - def self.no_compat?(); end - - def self.no_emoji?(); end - - def self.no_env_hints?(); end - - def self.no_github_api?(); end - - def self.no_google_analytics?(); end - - def self.no_insecure_redirect?(); end - - def self.no_install_cleanup?(); end - - def self.no_install_from_api?(); end - - def self.no_install_upgrade?(); end - - def self.no_installed_dependents_check?(); end - - def self.no_proxy(); end - - def self.pip_index_url(); end - - def self.pry?(); end - - def self.simulate_macos_on_linux?(); end - - def self.skip_or_later_bottles?(); end - - def self.sorbet_runtime?(); end - - def self.ssh_config_path(); end - - def self.sudo_askpass(); end - - def self.svn(); end - - def self.temp(); end - - def self.update_to_tag?(); end - - def self.verbose?(); end - - def self.verbose_using_dots?(); end -end - module Homebrew::Fetch extend ::T::Private::Methods::MethodHooks extend ::T::Private::Methods::SingletonMethodHooks