mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

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.
64 lines
1.8 KiB
Ruby
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)
|