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 (*Generator) AddCommand ¶
func (g *Generator) AddCommand(cmd CommandInfo)
AddCommand registers a command for completion.
func (*Generator) AddFlagsFromFlagSet ¶
AddFlagsFromFlagSet extracts flags from a flag.FlagSet and adds them as global flags.
func (*Generator) AddGlobalFlag ¶
AddGlobalFlag registers a global flag for completion.
Click to show internal directories.
Click to hide internal directories.