Class: Homebrew::AbstractCommand Abstract
Overview
It cannot be directly instantiated. Subclasses must implement the abstract methods below.
Subclass this to implement a brew command. This is preferred to declaring a named function in the Homebrew
module, because:
- Each Command lives in an isolated namespace.
 - Each Command implements a defined interface.
 argsis available as an instance method and thus does not need to be passed as an argument to helper methods.- Subclasses no longer need to reference 
CLI::Parseror parse args explicitly. 
To subclass, implement a run method and provide a cmd_args block to document the command and its allowed args.
To generate method signatures for command args, run brew typecheck --update.
Direct Known Subclasses
Cmd::Alias, Cmd::Analytics, Cmd::Autoremove, Cmd::Brew, Cmd::Bundle, Cmd::Cache, Cmd::Caskroom, Cmd::Casks, Cmd::Cellar, Cmd::CleanupCmd, Cmd::Command, Cmd::CommandNotFoundInit, Cmd::CommandsCmd, Cmd::CompletionsCmd, Cmd::Config, Cmd::Deps, Cmd::Desc, Cmd::Developer, Cmd::Docs, Cmd::Doctor, Cmd::Env, Cmd::FetchCmd, Cmd::Formulae, Cmd::GistLogs, Cmd::HelpCmd, Cmd::Home, Cmd::Info, Cmd::InstallCmd, Cmd::Leaves, Cmd::Link, Cmd::List, Cmd::Log, Cmd::McpServerCmd, Cmd::Migrate, Cmd::Missing, Cmd::NodenvSync, Cmd::OptionsCmd, Cmd::Outdated, Cmd::Pin, Cmd::Postinstall, Cmd::Prefix, Cmd::PyenvSync, Cmd::RbenvSync, Cmd::ReadallCmd, Cmd::Reinstall, Cmd::Repository, Cmd::SearchCmd, Cmd::Services, Cmd::SetupRuby, Cmd::Shellenv, Cmd::TabCmd, Cmd::TapCmd, Cmd::TapInfo, Cmd::TestBotCmd, Cmd::Unalias, Cmd::UninstallCmd, Cmd::UnlinkCmd, Cmd::Unpin, Cmd::Untap, Cmd::Update, Cmd::UpdateIfNeeded, Cmd::UpdateReport, Cmd::UpdateReset, Cmd::UpgradeCmd, Cmd::Uses, Cmd::VendorInstall, Cmd::Version, Cmd::WhichFormula, DevCmd::Audit, DevCmd::Bottle, DevCmd::Bump, DevCmd::BumpCaskPr, DevCmd::BumpFormulaPr, DevCmd::BumpRevision, DevCmd::BumpUnversionedCasks, DevCmd::Cat, DevCmd::Contributions, DevCmd::Create, DevCmd::Debugger, DevCmd::DetermineTestRunners, DevCmd::DispatchBuildBottle, DevCmd::Edit, DevCmd::Extract, DevCmd::FormulaAnalytics, DevCmd::FormulaCmd, DevCmd::GenerateAnalyticsApi, DevCmd::GenerateCaskApi, DevCmd::GenerateCaskCiMatrix, DevCmd::GenerateFormulaApi, DevCmd::GenerateManCompletions, DevCmd::InstallBundlerGems, DevCmd::Irb, DevCmd::Lgtm, DevCmd::Linkage, DevCmd::LivecheckCmd, DevCmd::PrAutomerge, DevCmd::PrPublish, DevCmd::PrPull, DevCmd::PrUpload, DevCmd::Prof, DevCmd::Release, DevCmd::Rubocop, DevCmd::Ruby, DevCmd::Rubydoc, DevCmd::Sh, DevCmd::StyleCmd, DevCmd::TapNew, DevCmd::Test, DevCmd::Tests, DevCmd::Typecheck, DevCmd::Unbottled, DevCmd::Unpack, DevCmd::UpdateLicenseData, DevCmd::UpdateMaintainers, DevCmd::UpdatePerlResources, DevCmd::UpdatePythonResources, DevCmd::UpdateSponsors, DevCmd::UpdateTest, DevCmd::VendorGems, DevCmd::Verify, DevCmd::WhichUpdate
Class Attribute Summary collapse
- .args_class ⇒ T.class_of(CLI::Args)? readonly private
 
Instance Attribute Summary collapse
- #args ⇒ CLI::Args readonly private
 
Class Method Summary collapse
- 
  
    
      .command(name)  ⇒ T.class_of(AbstractCommand)? 
    
    
  
  
  
  
  
  
  
  private
  
    
The AbstractCommand subclass associated with the brew CLI command name.
 - .command_name ⇒ String private
 - .dev_cmd? ⇒ Boolean private
 - .parser ⇒ CLI::Parser private
 - .ruby_cmd? ⇒ Boolean private
 
Instance Method Summary collapse
- #initialize(argv = ARGV.freeze) ⇒ void constructor private
 - 
  
    
      #run  ⇒ void 
    
    
  
  
  
  
  
  abstract
  
  
  
    
This method will be invoked when the command is run.
 
Methods included from Utils::Output::Mixin
#odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #pretty_duration, #pretty_installed, #pretty_outdated, #pretty_uninstalled
Constructor Details
#initialize(argv = ARGV.freeze) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
      69 70 71  | 
    
      # File 'abstract_command.rb', line 69 def initialize(argv = ARGV.freeze) @args = T.let(self.class.parser.parse(argv), CLI::Args) end  | 
  
Class Attribute Details
.args_class ⇒ T.class_of(CLI::Args)? (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
      29 30 31  | 
    
      # File 'abstract_command.rb', line 29 def args_class @args_class end  | 
  
Instance Attribute Details
#args ⇒ CLI::Args (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
      66 67 68  | 
    
      # File 'abstract_command.rb', line 66 def args @args end  | 
  
Class Method Details
.command(name) ⇒ T.class_of(AbstractCommand)?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the AbstractCommand subclass associated with the brew CLI command name.
      42  | 
    
      # File 'abstract_command.rb', line 42 def command(name) = subclasses.find { _1.command_name == name }  | 
  
.command_name ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
      32 33 34 35 36 37 38  | 
    
      # File 'abstract_command.rb', line 32 def command_name require "utils" Utils.underscore(T.must(name).split("::").fetch(-1)) .tr("_", "-") .delete_suffix("-cmd") end  | 
  
.dev_cmd? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
      45  | 
    
      # File 'abstract_command.rb', line 45 def dev_cmd? = T.must(name).start_with?("Homebrew::DevCmd")  | 
  
.parser ⇒ CLI::Parser
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
      51  | 
    
      # File 'abstract_command.rb', line 51 def parser = CLI::Parser.new(self, &@parser_block)  | 
  
.ruby_cmd? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
      48  | 
    
      # File 'abstract_command.rb', line 48 def ruby_cmd? = !include?(Homebrew::ShellCommand)  | 
  
Instance Method Details
#run ⇒ void
This method returns an undefined value.
This method will be invoked when the command is run.
      77  | 
    
      # File 'abstract_command.rb', line 77 def run; end  |