feat: migrate from docopt to cobra for CLI argument parsing

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>
This commit is contained in:
Christopher Allen Lane
2026-02-15 17:33:47 -05:00
parent ca1ec0e38d
commit 9b92261604
119 changed files with 14204 additions and 3127 deletions

View File

@@ -0,0 +1,38 @@
package completions
import (
"runtime"
"github.com/mitchellh/go-homedir"
"github.com/cheat/cheat/internal/config"
)
// loadConfig loads the cheat configuration for use in completion functions.
// It returns an error rather than exiting, since completions should degrade
// gracefully.
func loadConfig() (config.Config, error) {
home, err := homedir.Dir()
if err != nil {
return config.Config{}, err
}
envvars := config.EnvVars()
confpaths, err := config.Paths(runtime.GOOS, home, envvars)
if err != nil {
return config.Config{}, err
}
confpath, err := config.Path(confpaths)
if err != nil {
return config.Config{}, err
}
conf, err := config.New(confpath, true)
if err != nil {
return config.Config{}, err
}
return conf, nil
}