From 6b56c2ee5f14fc139ff6884223e288f8685f24dd Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Sun, 16 Feb 2025 15:41:57 -0800 Subject: [PATCH] Revert to_formulae_and_casks sig change --- Library/Homebrew/cli/named_args.rb | 33 +++++++++++------------- Library/Homebrew/cmd/--cache.rb | 2 +- Library/Homebrew/cmd/desc.rb | 2 +- Library/Homebrew/cmd/home.rb | 3 ++- Library/Homebrew/cmd/list.rb | 4 ++- Library/Homebrew/dependencies_helpers.rb | 10 ++++--- 6 files changed, 28 insertions(+), 26 deletions(-) diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index 2620ec1ccb..f74719babb 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -70,29 +70,26 @@ module Homebrew method: T.nilable(Symbol), uniq: T::Boolean, warn: T::Boolean, - ).returns(T::Array[T.any(Formula, Cask::Cask)]) + ).returns(T::Array[T.any(Formula, Keg, Cask::Cask)]) } def to_formulae_and_casks( only: parent.only_formula_or_cask, ignore_unavailable: false, method: nil, uniq: true, warn: false ) @to_formulae_and_casks ||= T.let( - {}, T.nilable(T::Hash[T.nilable(Symbol), T::Array[T.any(Formula, Cask::Cask)]]) - ) - @to_formulae_and_casks[only] ||= T.cast( - downcased_unique_named.flat_map do |name| - options = { warn: }.compact - load_formula_or_cask(name, only:, method:, **options) - rescue FormulaUnreadableError, FormulaClassUnavailableError, - TapFormulaUnreadableError, TapFormulaClassUnavailableError, - Cask::CaskUnreadableError - # Need to rescue before `*UnavailableError` (superclass of this) - # The formula/cask was found, but there's a problem with its implementation - raise - rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError, FormulaOrCaskUnavailableError - ignore_unavailable ? [] : raise - end.freeze, - T::Array[T.any(Formula, Cask::Cask)], + {}, T.nilable(T::Hash[T.nilable(Symbol), T::Array[T.any(Formula, Keg, Cask::Cask)]]) ) + @to_formulae_and_casks[only] ||= downcased_unique_named.flat_map do |name| + options = { warn: }.compact + load_formula_or_cask(name, only:, method:, **options) + rescue FormulaUnreadableError, FormulaClassUnavailableError, + TapFormulaUnreadableError, TapFormulaClassUnavailableError, + Cask::CaskUnreadableError + # Need to rescue before `*UnavailableError` (superclass of this) + # The formula/cask was found, but there's a problem with its implementation + raise + rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError, FormulaOrCaskUnavailableError + ignore_unavailable ? [] : raise + end.freeze if uniq @to_formulae_and_casks.fetch(only).uniq.freeze @@ -123,7 +120,7 @@ module Homebrew def to_formulae_and_casks_with_taps formulae_and_casks_with_taps, formulae_and_casks_without_taps = to_formulae_and_casks.partition do |formula_or_cask| - formula_or_cask.tap&.installed? + T.cast(formula_or_cask, T.any(Formula, Cask::Cask)).tap&.installed? end return formulae_and_casks_with_taps if formulae_and_casks_without_taps.empty? diff --git a/Library/Homebrew/cmd/--cache.rb b/Library/Homebrew/cmd/--cache.rb index 7cdbab67b7..63939f8816 100644 --- a/Library/Homebrew/cmd/--cache.rb +++ b/Library/Homebrew/cmd/--cache.rb @@ -81,7 +81,7 @@ module Homebrew end end else - T.absurd(formula_or_cask) + raise "Invalid type: #{formula_or_cask.class}" end end end diff --git a/Library/Homebrew/cmd/desc.rb b/Library/Homebrew/cmd/desc.rb index 76632b0c1a..9b87d7b6aa 100644 --- a/Library/Homebrew/cmd/desc.rb +++ b/Library/Homebrew/cmd/desc.rb @@ -65,7 +65,7 @@ module Homebrew description = formula_or_cask.desc.presence || Formatter.warning("[no description]") desc[formula_or_cask.full_name] = "(#{formula_or_cask.name.join(", ")}) #{description}" else - T.absurd(formula_or_cask) + raise TypeError, "Unsupported formula_or_cask type: #{formula_or_cask.class}" end end Descriptions.new(desc).print diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index 128213caeb..59ac2b6c5c 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -29,7 +29,8 @@ module Homebrew return end - formulae_or_casks = args.named.to_formulae_and_casks + # to_formulae_and_casks is typed to possibly return Kegs (but won't without explicitly asking) + formulae_or_casks = T.cast(args.named.to_formulae_and_casks, T::Array[T.any(Formula, Cask::Cask)]) homepages = formulae_or_casks.map do |formula_or_cask| puts "Opening homepage for #{name_of(formula_or_cask)}" formula_or_cask.homepage diff --git a/Library/Homebrew/cmd/list.rb b/Library/Homebrew/cmd/list.rb index 695718585d..538baed2c1 100644 --- a/Library/Homebrew/cmd/list.rb +++ b/Library/Homebrew/cmd/list.rb @@ -99,7 +99,9 @@ module Homebrew else args.named.to_formulae_and_casks(only: :cask, method: :resolve) end - full_cask_names = cask_names.map(&:full_name).sort(&tap_and_name_comparison) + # The cast is because `Keg`` does not define `full_name` + full_cask_names = T.cast(cask_names, T::Array[T.any(Formula, Cask::Cask)]) + .map(&:full_name).sort(&tap_and_name_comparison) full_cask_names = Formatter.columns(full_cask_names) unless args.public_send(:"1?") puts full_cask_names if full_cask_names.present? end diff --git a/Library/Homebrew/dependencies_helpers.rb b/Library/Homebrew/dependencies_helpers.rb index b274eb6c30..afeea62b11 100644 --- a/Library/Homebrew/dependencies_helpers.rb +++ b/Library/Homebrew/dependencies_helpers.rb @@ -79,14 +79,16 @@ module DependenciesHelpers end sig { - params(formulae_or_casks: T::Array[T.any(Formula, Cask::Cask)]).returns(T::Array[T.any(Formula, CaskDependent)]) + params(formulae_or_casks: T::Array[T.any(Formula, Keg, Cask::Cask)]) + .returns(T::Array[T.any(Formula, CaskDependent)]) } def dependents(formulae_or_casks) formulae_or_casks.map do |formula_or_cask| - if formula_or_cask.is_a?(Formula) - formula_or_cask + case formula_or_cask + when Formula then formula_or_cask + when Cask::Cask then CaskDependent.new(formula_or_cask) else - CaskDependent.new(formula_or_cask) + raise TypeError, "Unsupported type: #{formula_or_cask.class}" end end end