From 7cc927aa15acad6fa434484ccd83c2d6d13629d0 Mon Sep 17 00:00:00 2001 From: Marques Johansson Date: Fri, 14 Aug 2020 21:49:35 -0400 Subject: [PATCH] add tink-cli completion subcommand Signed-off-by: Marques Johansson --- .gitignore | 1 + cmd/tink-cli/.gitignore | 1 + cmd/tink-cli/cmd/completion.go | 61 ++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 cmd/tink-cli/cmd/completion.go diff --git a/.gitignore b/.gitignore index 5ef30446e..c11892ffa 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ cmd/tink-cli/tink-cli cmd/tink-server/tink-server cmd/tink-worker/tink-worker .idea +.vscode # Terraform .terraform diff --git a/cmd/tink-cli/.gitignore b/cmd/tink-cli/.gitignore index aaa6c93ce..bba267ee9 100644 --- a/cmd/tink-cli/.gitignore +++ b/cmd/tink-cli/.gitignore @@ -1 +1,2 @@ /tink +.vscode diff --git a/cmd/tink-cli/cmd/completion.go b/cmd/tink-cli/cmd/completion.go new file mode 100644 index 000000000..78acafcaa --- /dev/null +++ b/cmd/tink-cli/cmd/completion.go @@ -0,0 +1,61 @@ +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" +) + +// completionCmd returns the completion command that, when run, generates a +// bash or zsh completion script for the CLI +func completionCmd(name string) *cobra.Command { + return &cobra.Command{ + Use: "completion [bash|zsh|fish|powershell]", + Short: "Generate completion script", + Long: `To load completions: + Bash: + $ source <(tink-cli completion bash) + Bash (3.2.x): + $ eval "$(tink-cli completion bash)" + # To load completions for each session, execute once: + Linux: + $ tink-cli completion bash > /etc/bash_completion.d/tink-cli + MacOS: + $ tink-cli completion bash > /usr/local/etc/bash_completion.d/tink-cli + Zsh: + $ source <(tink-cli completion zsh) + # To load completions for each session, execute once: + $ tink-cli completion zsh > "${fpath[1]}/_tink-cli" + Fish: + $ tink-cli completion fish | source + # To load completions for each session, execute once: + $ tink-cli completion fish > ~/.config/fish/completions/tink-cli.fish + `, + DisableFlagsInUseLine: true, + Hidden: true, + ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, + Args: cobra.ExactValidArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + switch args[0] { + case "bash": + return cmd.Root().GenBashCompletion(os.Stdout) + case "zsh": + return cmd.Root().GenZshCompletion(os.Stdout) + case "fish": + return cmd.Root().GenFishCompletion(os.Stdout, true) + case "powershell": + return cmd.Root().GenPowerShellCompletion(os.Stdout) + } + // ValidArgs make this error response dead-code + return fmt.Errorf("unknown shell: %q", args[0]) + }, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + return nil + }, + } +} + +func init() { + rootCmd.AddCommand(completionCmd(rootCmd.CalledAs())) +}