mirror of
https://github.com/cheat/cheat.git
synced 2026-03-07 11:13:33 +01:00
Replace docopt-go with spf13/cobra, giving cheat a built-in `--completion` flag that dynamically generates shell completions for bash, zsh, fish, and powershell. This replaces the manually-maintained static completion scripts and resolves the root cause of multiple completion issues (#768, #705, #633, #632, #476). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
44 lines
924 B
Go
44 lines
924 B
Go
// Package completions provides dynamic shell completion functions and
|
|
// completion script generation for the cheat CLI.
|
|
package completions
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/cheat/cheat/internal/sheets"
|
|
)
|
|
|
|
// Cheatsheets provides completion for cheatsheet names.
|
|
func Cheatsheets(
|
|
_ *cobra.Command,
|
|
args []string,
|
|
_ string,
|
|
) ([]string, cobra.ShellCompDirective) {
|
|
|
|
if len(args) > 0 {
|
|
return nil, cobra.ShellCompDirectiveNoFileComp
|
|
}
|
|
|
|
conf, err := loadConfig()
|
|
if err != nil {
|
|
return nil, cobra.ShellCompDirectiveNoFileComp
|
|
}
|
|
|
|
cheatsheets, err := sheets.Load(conf.Cheatpaths)
|
|
if err != nil {
|
|
return nil, cobra.ShellCompDirectiveNoFileComp
|
|
}
|
|
|
|
consolidated := sheets.Consolidate(cheatsheets)
|
|
|
|
names := make([]string, 0, len(consolidated))
|
|
for name := range consolidated {
|
|
names = append(names, name)
|
|
}
|
|
sort.Strings(names)
|
|
|
|
return names, cobra.ShellCompDirectiveNoFileComp
|
|
}
|