package commands import ( "fmt" "github.com/spf13/cobra" ) // NewCompletionCmd returns a cobra.Command that generates bash and zsh // completion scripts for the given root command. If hidden is true, the // command will not show up in the root command's list of available commands. func NewCompletionCmd(rootCmd *cobra.Command, hidden bool) *cobra.Command { flagZsh := "zsh" cmd := &cobra.Command{ Use: "completion", Short: "Generate shell completion scripts", Long: fmt.Sprintf(`Generate Bash and Zsh completion scripts and print them to STDOUT. Once saved to file, a completion script can be loaded in the shell's current session as shown: $ . <(%s completion) To configure your bash shell to load completions for each session add to your $HOME/.bashrc or $HOME/.profile the following instruction: . <(%s completion) `, rootCmd.Use, rootCmd.Use), RunE: func(cmd *cobra.Command, _ []string) error { zsh, err := cmd.Flags().GetBool(flagZsh) if err != nil { return err } if zsh { return rootCmd.GenZshCompletion(cmd.OutOrStdout()) } return rootCmd.GenBashCompletion(cmd.OutOrStdout()) }, Hidden: hidden, Args: cobra.NoArgs, } cmd.Flags().Bool(flagZsh, false, "Generate Zsh completion script") return cmd }