brew/Library/Homebrew/extend/os/mac/missing_formula.rb
Mike McQuaid 9ac306e464
Remove alias generic_* definitions in favour of using super
This is the pattern we've been adopting for a while and it's a bit
cleaner. Let's remove all of the existing usage of the existing pattern
to avoid confusion when adopting the new one.
2025-06-16 08:10:08 +00:00

64 lines
1.8 KiB
Ruby

# typed: strict
# frozen_string_literal: true
require "cask/info"
require "cask/cask_loader"
require "cask/caskroom"
module OS
module Mac
module MissingFormula
module ClassMethods
sig { params(name: String).returns(T.nilable(String)) }
def disallowed_reason(name)
case name.downcase
when "xcode"
<<~EOS
Xcode can be installed from the App Store.
EOS
else
super
end
end
sig { params(name: String, silent: T::Boolean, show_info: T::Boolean).returns(T.nilable(String)) }
def cask_reason(name, silent: false, show_info: false)
return if silent
suggest_command(name, show_info ? "info" : "install")
end
sig { params(name: String, command: String).returns(T.nilable(String)) }
def suggest_command(name, command)
suggestion = <<~EOS
Found a cask named "#{name}" instead. Try
brew #{command} --cask #{name}
EOS
case command
when "install"
::Cask::CaskLoader.load(name)
when "uninstall"
cask = ::Cask::Caskroom.casks.find { |installed_cask| installed_cask.to_s == name }
Kernel.raise ::Cask::CaskUnavailableError, name if cask.nil?
when "info"
cask = ::Cask::CaskLoader.load(name)
suggestion = <<~EOS
Found a cask named "#{name}" instead.
#{::Cask::Info.get_info(cask)}
EOS
else
return
end
suggestion
rescue ::Cask::CaskUnavailableError
nil
end
end
end
end
end
Homebrew::MissingFormula.singleton_class.prepend(OS::Mac::MissingFormula::ClassMethods)