Class: Clamp::Completion::FishGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/clamp/completion/fish_generator.rb

Overview

Generates fish shell completion scripts.

Instance Method Summary collapse

Constructor Details

#initialize(command_class, executable_name) ⇒ FishGenerator

Returns a new instance of FishGenerator.



9
10
11
12
# File 'lib/clamp/completion/fish_generator.rb', line 9

def initialize(command_class, executable_name)
  @command_class = command_class
  @executable_name = executable_name
end

Instance Method Details

#generateObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/clamp/completion/fish_generator.rb', line 14

def generate
  lines = []
  lines << "# Fish completions for #{@executable_name}"
  lines << "# Generated by Clamp"
  lines << ""
  Completion.walk_command_tree(@command_class) do |cmd, path, has_children|
    child_names = has_children ? cmd.recognised_subcommands.flat_map(&:names) : []
    condition = condition_for(path, child_names)
    Completion.visible_options(cmd).each do |option|
      lines << option_completion(option, condition)
    end
    next unless has_children

    cmd.recognised_subcommands.each do |sub|
      sub.names.each do |name|
        lines << "complete -c #{@executable_name} -f -n '#{condition}' -a #{name} " \
                 "-d '#{escape(sub.description)}'"
      end
    end
    lines << ""
  end
  "#{lines.join("\n")}\n"
end