completion

package
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 8, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func BashCompletion

func BashCompletion(appName string, commands []CommandInfo, globalFlags []FlagInfo) string

BashCompletion generates a data-driven bash completion script. The script can be sourced to enable tab completion: source <(cmd completion bash)

Types

type CommandInfo

type CommandInfo struct {
	Name            string
	Aliases         []string
	Category        string
	Flags           []FlagInfo
	CompletionWords []string      // static word list for positional arg completion
	CompletionFile  string        // file glob for _filedir, e.g., "@(json|yaml)"
	NoArgCompletion bool          // disable arg completion entirely
	SubCommands     []CommandInfo // one-level subcommands (e.g., node run|start|stop|status)
}

CommandInfo holds metadata about a command for completion generation.

type FlagInfo

type FlagInfo struct {
	Name       string
	TakesValue bool     // true for non-bool flags
	Values     []string // possible values for this flag
}

FlagInfo holds metadata about a flag for completion.

type Generator

type Generator struct {
	// contains filtered or unexported fields
}

Generator generates shell completion scripts.

Example
package main

import (
	"fmt"
	"strings"

	"github.com/cbluth/bittorrent/pkg/cli/completion"
)

func main() {
	gen := completion.New("myapp")

	// Global flags
	gen.AddGlobalFlag(completion.FlagInfo{Name: "config", TakesValue: true})
	gen.AddGlobalFlag(completion.FlagInfo{Name: "verbose"})

	// Commands with completion hints
	gen.AddCommand(completion.CommandInfo{
		Name:    "serve",
		Aliases: []string{"server"},
	})
	gen.AddCommand(completion.CommandInfo{
		Name:           "add",
		Aliases:        []string{"put"},
		CompletionFile: "@(json|yaml)",
		Flags: []completion.FlagInfo{
			{Name: "hash", TakesValue: true, Values: []string{"sha256", "sha512", "blake3"}},
			{Name: "dry-run"},
		},
	})
	gen.AddCommand(completion.CommandInfo{
		Name:            "status",
		CompletionWords: []string{"all", "running", "stopped"},
	})
	gen.AddCommand(completion.CommandInfo{
		Name:            "connect",
		NoArgCompletion: true,
	})

	script, err := gen.Generate("bash")
	if err != nil {
		panic(err)
	}

	// Show key parts of the generated script
	lines := strings.Split(script, "\n")
	for _, line := range lines {
		trimmed := strings.TrimSpace(line)
		if trimmed == "" {
			continue
		}
		// Print structural lines to verify the output
		if strings.HasPrefix(trimmed, "# bash") ||
			strings.HasPrefix(trimmed, "local all_commands") ||
			strings.HasPrefix(trimmed, "local global_flags") ||
			strings.HasPrefix(trimmed, "complete ") {
			fmt.Println(trimmed)
		}
	}
}
Output:
# bash completion for myapp | -*- shell-script -*-
local all_commands="serve server add put status connect"
local global_flags="-config -verbose"
complete -F _myapp_completion myapp

func New

func New(appName string) *Generator

New creates a new completion generator.

func (*Generator) AddCommand

func (g *Generator) AddCommand(cmd CommandInfo)

AddCommand registers a command for completion.

func (*Generator) AddFlagsFromFlagSet

func (g *Generator) AddFlagsFromFlagSet(fs *flag.FlagSet)

AddFlagsFromFlagSet extracts flags from a flag.FlagSet and adds them as global flags.

func (*Generator) AddGlobalFlag

func (g *Generator) AddGlobalFlag(fi FlagInfo)

AddGlobalFlag registers a global flag for completion.

func (*Generator) Generate

func (g *Generator) Generate(shell string) (string, error)

Generate generates a completion script for the specified shell.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL