65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: true
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "cli/parser"
 | |
| 
 | |
| module Homebrew
 | |
|   extend T::Sig
 | |
| 
 | |
|   sig { returns(CLI::Parser) }
 | |
|   def self.cat_args
 | |
|     Homebrew::CLI::Parser.new do
 | |
|       description <<~EOS
 | |
|         Display the source of a <formula> or <cask>.
 | |
|       EOS
 | |
| 
 | |
|       switch "--formula", "--formulae",
 | |
|              description: "Treat all named arguments as formulae."
 | |
|       switch "--cask", "--casks",
 | |
|              description: "Treat all named arguments as casks."
 | |
| 
 | |
|       conflicts "--formula", "--cask"
 | |
| 
 | |
|       named_args [:formula, :cask], min: 1
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def self.cat
 | |
|     args = cat_args.parse
 | |
| 
 | |
|     cd HOMEBREW_REPOSITORY do
 | |
|       pager = if Homebrew::EnvConfig.bat?
 | |
|         ENV["BAT_CONFIG_PATH"] = Homebrew::EnvConfig.bat_config_path
 | |
|         ENV["BAT_THEME"] = Homebrew::EnvConfig.bat_theme
 | |
|         ensure_formula_installed!(
 | |
|           "bat",
 | |
|           reason:           "displaying <formula>/<cask> source",
 | |
|           # The user might want to capture the output of `brew cat ...`
 | |
|           # Redirect stdout to stderr
 | |
|           output_to_stderr: true,
 | |
|         ).opt_bin/"bat"
 | |
|       else
 | |
|         "cat"
 | |
|       end
 | |
| 
 | |
|       args.named.to_paths.each do |path|
 | |
|         next path if path.exist?
 | |
| 
 | |
|         path = path.basename(".rb") if args.cask?
 | |
| 
 | |
|         ofail "#{path}'s source doesn't exist on disk."
 | |
|       end
 | |
| 
 | |
|       if Homebrew.failed?
 | |
|         $stderr.puts "The name may be wrong, or the tap hasn't been tapped. Instead try:"
 | |
|         treat_as = "--cask " if args.cask?
 | |
|         treat_as = "--formula " if args.formula?
 | |
|         $stderr.puts "  brew info --github #{treat_as}#{args.named.join(" ")}"
 | |
|         return
 | |
|       end
 | |
| 
 | |
|       safe_system pager, *args.named.to_paths
 | |
|     end
 | |
|   end
 | |
| end
 | 
