From 2a031c5542f25a16032ab009fd154b32d014deca Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Tue, 14 Dec 2021 14:04:23 +0300 Subject: [PATCH] [#1013] Support autocomplete in neofs-adm Signed-off-by: Alex Vanin --- .../internal/modules/autocomplete.go | 58 +++++++++++++++++++ cmd/neofs-adm/internal/modules/root.go | 2 + 2 files changed, 60 insertions(+) create mode 100644 cmd/neofs-adm/internal/modules/autocomplete.go diff --git a/cmd/neofs-adm/internal/modules/autocomplete.go b/cmd/neofs-adm/internal/modules/autocomplete.go new file mode 100644 index 00000000..108b8793 --- /dev/null +++ b/cmd/neofs-adm/internal/modules/autocomplete.go @@ -0,0 +1,58 @@ +package modules + +import ( + "os" + + "github.com/spf13/cobra" +) + +var completionCmd = &cobra.Command{ + Use: "completion [bash|zsh|fish|powershell]", + Short: "Generate completion script", + Long: `To load completions: + +Bash: + +$ source <(neofs-adm completion bash) + +# To load completions for each session, execute once: +Linux: + $ neofs-adm completion bash > /etc/bash_completion.d/neofs-adm +MacOS: + $ neofs-adm completion bash > /usr/local/etc/bash_completion.d/neofs-adm + +Zsh: + +# If shell completion is not already enabled in your environment you will need +# to enable it. You can execute the following once: + +$ echo "autoload -U compinit; compinit" >> ~/.zshrc + +# To load completions for each session, execute once: +$ neofs-adm completion zsh > "${fpath[1]}/_neofs-adm" + +# You will need to start a new shell for this setup to take effect. + +Fish: + +$ neofs-adm completion fish | source + +# To load completions for each session, execute once: +$ neofs-adm completion fish > ~/.config/fish/completions/neofs-adm.fish +`, + DisableFlagsInUseLine: true, + ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, + Args: cobra.ExactValidArgs(1), + Run: func(cmd *cobra.Command, args []string) { + switch args[0] { + case "bash": + _ = cmd.Root().GenBashCompletion(os.Stdout) + case "zsh": + _ = cmd.Root().GenZshCompletion(os.Stdout) + case "fish": + _ = cmd.Root().GenFishCompletion(os.Stdout, true) + case "powershell": + _ = cmd.Root().GenPowerShellCompletion(os.Stdout) + } + }, +} diff --git a/cmd/neofs-adm/internal/modules/root.go b/cmd/neofs-adm/internal/modules/root.go index 1efd4f85..94c7bdcf 100644 --- a/cmd/neofs-adm/internal/modules/root.go +++ b/cmd/neofs-adm/internal/modules/root.go @@ -33,6 +33,8 @@ func init() { rootCmd.AddCommand(config.RootCmd) rootCmd.AddCommand(morph.RootCmd) + + rootCmd.AddCommand(completionCmd) } func Execute() error {