class Thor::Completion::Bash::Subcmd

{Thor} added as a {Thor.subcommand} to the includer of {Thor::Completion::Bash} to expose Bash completion endpoints.

Public Instance Methods

complete(*_) click to toggle source

Execute Bash completion.

@param [Array] *_

Ignored - input custom read from `ARGV`.

@return [void]

Never returns - manually calls `exit` when done.
# File lib/thor/completion/bash/subcmd.rb, line 52
def complete *_
  # logger.level = :trace

  logger.trace "Starting Bash complete...",
    ARGV: ARGV,
    args: args

  args = ARGV.dup

  args.shift while args[0] != '--'
  args.shift

  cur, prev, cword, split, *words = args

  request = Request.new \
    cur: cur, # options[:cur],
    prev: prev, # options[:prev],
    cword: cword.to_i, # options[:cword],
    split: split.truthy?, # options[:split],
    words: words

  logger.trace "Bash complete Request loaded",
    request: request

  results = begin
    self.class.target.bash_complete( request: request, index: 1 )
  rescue StandardError => error
    logger.error "Error raised processing Bash complete request",
      { request: request },
      error
    
    []
  end

  joined = results.shelljoin

  logger.trace "Sending Bash compelte response",
    request: request,
    results: results,
    joined: joined

  puts joined
  exit true
end
setup() click to toggle source

Print Bash source code to hook into `complete` to `$stdout`.

@return [nil]

# File lib/thor/completion/bash/subcmd.rb, line 111
def setup
  bin = File.basename $0
  name = bin.underscore

  erb_src_path = ::Thor::ROOT.join  'support',
                                    'completion',
                                    'complete.inc.bash.erb'

  erb_src = erb_src_path.read

  bash_src = binding.erb erb_src

  puts bash_src

  nil
end