Revert to_formulae_and_casks sig change

This commit is contained in:
Douglas Eichelberger 2025-02-16 15:41:57 -08:00
parent ff7f70d8b6
commit 6b56c2ee5f
6 changed files with 28 additions and 26 deletions

View File

@ -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?

View File

@ -81,7 +81,7 @@ module Homebrew
end
end
else
T.absurd(formula_or_cask)
raise "Invalid type: #{formula_or_cask.class}"
end
end
end

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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