diff --git a/Library/Homebrew/cask/cask.rbi b/Library/Homebrew/cask/cask.rbi new file mode 100644 index 0000000000000000000000000000000000000000..2eb7d68e53abe2a36cd01e21a8b8d7815f7b1af4 --- /dev/null +++ b/Library/Homebrew/cask/cask.rbi @@ -0,0 +1,7 @@ +# typed: strict + +module Cask + class Cask + def homepage; end + end +end diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index def392761b4bee5d03a7c898c13d1f7ddd5b543a..ff960b57a090a9ffdecdd4f85e52d14f59d115a9 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -37,11 +37,20 @@ module Homebrew @to_formulae ||= to_formulae_and_casks(only: :formula).freeze end + # Convert named arguments to {Formula} or {Cask} objects. + # If both a formula and cask with the same name exist, returns + # the formula and prints a warning unless `only` is specified. + sig do + params(only: T.nilable(Symbol), ignore_unavailable: T.nilable(T::Boolean), method: T.nilable(Symbol)) + .returns(T::Array[T.any(Formula, Keg, Cask::Cask)]) + end def to_formulae_and_casks(only: nil, ignore_unavailable: nil, method: nil) @to_formulae_and_casks ||= {} - @to_formulae_and_casks[only] ||= begin - to_objects(only: only, ignore_unavailable: ignore_unavailable, method: method).freeze - end + @to_formulae_and_casks[only] ||= downcased_unique_named.flat_map do |name| + load_formula_or_cask(name, only: only, method: method) + rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError + ignore_unavailable ? [] : raise + end.uniq.freeze end def to_formulae_to_casks(only: nil, method: nil) @@ -88,6 +97,12 @@ module Homebrew begin return Cask::CaskLoader.load(name, config: Cask::Config.from_args(@parent)) rescue Cask::CaskUnavailableError => e + default_cask_tap = Tap.default_cask_tap + unless default_cask_tap.installed? + default_cask_tap.install + retry + end + raise e if only == :cask end end @@ -111,19 +126,6 @@ module Homebrew to_formulae_to_casks(only: only, method: :resolve) end - # Convert named arguments to {Formula} or {Cask} objects. - # If both a formula and cask exist with the same name, returns the - # formula and prints a warning unless `only` is specified. - def to_objects(only: nil, ignore_unavailable: nil, method: nil) - @to_objects ||= {} - @to_objects[only] ||= downcased_unique_named.flat_map do |name| - load_formula_or_cask(name, only: only, method: method) - rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError - ignore_unavailable ? [] : raise - end.uniq.freeze - end - private :to_objects - def to_formulae_paths to_paths(only: :formula) end diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index 2dfa1c8f4144303e8c86f12192bda3d7712add04..224a366c3850c50a6cbb2b293ace685272dea6ee 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -35,7 +35,7 @@ module Homebrew formula_or_cask.homepage end - exec_browser(*homepages) + exec_browser(*T.unsafe(homepages)) end def name_of(formula_or_cask)