diff --git a/Library/Homebrew/cmd/completions.rb b/Library/Homebrew/cmd/completions.rb index ac7a8e2a5f..2fd15596ce 100644 --- a/Library/Homebrew/cmd/completions.rb +++ b/Library/Homebrew/cmd/completions.rb @@ -1,49 +1,46 @@ # typed: strict # frozen_string_literal: true -require "cli/parser" +require "abstract_command" require "completions" module Homebrew - module_function + module Cmd + class CompletionsCmd < AbstractCommand + cmd_args do + description <<~EOS + Control whether Homebrew automatically links external tap shell completion files. + Read more at . - sig { returns(CLI::Parser) } - def completions_args - Homebrew::CLI::Parser.new do - description <<~EOS - Control whether Homebrew automatically links external tap shell completion files. - Read more at . + `brew completions` [`state`]: + Display the current state of Homebrew's completions. - `brew completions` [`state`]: - Display the current state of Homebrew's completions. + `brew completions` (`link`|`unlink`): + Link or unlink Homebrew's completions. + EOS - `brew completions` (`link`|`unlink`): - Link or unlink Homebrew's completions. - EOS - - named_args %w[state link unlink], max: 1 - end - end - - sig { void } - def completions - args = completions_args.parse - - case args.named.first - when nil, "state" - if Completions.link_completions? - puts "Completions are linked." - else - puts "Completions are not linked." + named_args %w[state link unlink], max: 1 + end + + sig { override.void } + def run + case args.named.first + when nil, "state" + if Completions.link_completions? + puts "Completions are linked." + else + puts "Completions are not linked." + end + when "link" + Completions.link! + puts "Completions are now linked." + when "unlink" + Completions.unlink! + puts "Completions are no longer linked." + else + raise UsageError, "unknown subcommand: #{args.named.first}" + end end - when "link" - Completions.link! - puts "Completions are now linked." - when "unlink" - Completions.unlink! - puts "Completions are no longer linked." - else - raise UsageError, "unknown subcommand: #{args.named.first}" end end end diff --git a/Library/Homebrew/test/cmd/completions_spec.rb b/Library/Homebrew/test/cmd/completions_spec.rb index ab0bd90a63..6cc7cc2496 100644 --- a/Library/Homebrew/test/cmd/completions_spec.rb +++ b/Library/Homebrew/test/cmd/completions_spec.rb @@ -1,8 +1,9 @@ # frozen_string_literal: true +require "cmd/completions" require "cmd/shared_examples/args_parse" -RSpec.describe "brew completions" do +RSpec.describe Homebrew::Cmd::CompletionsCmd do it_behaves_like "parseable arguments" it "runs the status subcommand correctly", :integration_test do