class Doing::Completion::FigCompletions

Generate completions for zsh

Attributes

commands[RW]
global_options[RW]

Public Class Methods

new() click to toggle source
# File lib/doing/completion/fig_completion.rb, line 106
def initialize
  data = Completion.get_help_sections
  @global_options = Completion.parse_options(data[:global_options])
  @commands = Completion.parse_commands(data[:commands])
  @bar = TTY::ProgressBar.new(" \033[0;0;33mGenerating Fig completions: \033[0;35;40m[:bar] :status\033[0m", total: @commands.count + 1, bar_format: :square, hide_cursor: true, status: 'processing subcommands')
  width = TTY::Screen.columns - 45
  @bar.resize(width)
end

Public Instance Methods

generate_completions() click to toggle source
# File lib/doing/completion/fig_completion.rb, line 115
def generate_completions
  @bar.start
  generate_helpers
end
generate_helpers() click to toggle source
# File lib/doing/completion/fig_completion.rb, line 15
      def generate_helpers
        out=<<~EOFUNCTIONS
        const completionSpec: Fig.Spec = {
          name: "doing",
          description: "A CLI for a What Was I Doing system",
          subcommands: [
            #{generate_subcommand_completions.join("\n    ")}
          ],
        };
        export default completionSpec;
        EOFUNCTIONS
        @bar.advance(status: '✅')
        @bar.finish
        out
      end
generate_subcommand_completions() click to toggle source
# File lib/doing/completion/fig_completion.rb, line 31
      def generate_subcommand_completions
        out = []
        indent = '      '
        @commands.each do |cmd|
          cmd[:commands].each do |c|
            out << <<~EOCOMMAND
              {
              #{indent}name: "#{c}",
              #{indent}description: "#{cmd[:description].sanitize}",
              #{indent}#{generate_subcommand_option_completions(cmd)}
                  },
            EOCOMMAND
          end
        end

        out
      end
generate_subcommand_option_completions(cmd, indent: ' ') click to toggle source
# File lib/doing/completion/fig_completion.rb, line 49
      def generate_subcommand_option_completions(cmd, indent: '          ')
        out = []

        @bar.advance(status: cmd[:commands].first)

        data = Completion.get_help_sections(cmd[:commands].first)

        option_arr = []

        if data[:command_options]
          Completion.parse_options(data[:command_options]).each do |option|
            next if option.nil?

            arg = ''

            if option[:arg]
              arg =<<~EOARG
              args: {
              #{indent}        name: "#{option[:arg]}",
              #{indent}        description: "#{option[:arg]}",
              #{indent}  },
              EOARG
            end

            if option[:short]
              opt_data =<<~EOOPT
              {
              #{indent}  name: ["-#{option[:short]}", "--#{option[:long]}"],
              #{indent}  description: "#{option[:description].sanitize}",
              #{indent}  #{arg}
              #{indent}},
              EOOPT
            else
              opt_data = <<~EOOPT
              {
              #{indent}  name: ["--#{option[:long]}"],
              #{indent}  description: "#{option[:description].sanitize}",
              #{indent}  #{arg}
              #{indent}},
              EOOPT
            end

            option_arr << opt_data

          end

          cmd_opts = <<~EOCMD
            options: [
            #{indent}#{option_arr.join("\n#{indent}")}
                    ],
          EOCMD
          out << cmd_opts
        end

        out.join("\n")
      end