From efabffbfd0ab52bc8b241d7a2c7bcf5566a0a124 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 11 Jan 2022 15:24:06 +0300 Subject: [PATCH] [#1041] cmd/*: factor out autocomplet command generation Signed-off-by: Evgenii Stratonikov --- .../internal/modules/autocomplete.go | 58 ----------------- cmd/neofs-adm/internal/modules/root.go | 3 +- cmd/neofs-cli/modules/completion.go | 57 +--------------- pkg/util/autocomplete/autocomplete.go | 65 +++++++++++++++++++ 4 files changed, 69 insertions(+), 114 deletions(-) delete mode 100644 cmd/neofs-adm/internal/modules/autocomplete.go create mode 100644 pkg/util/autocomplete/autocomplete.go diff --git a/cmd/neofs-adm/internal/modules/autocomplete.go b/cmd/neofs-adm/internal/modules/autocomplete.go deleted file mode 100644 index 108b8793c..000000000 --- a/cmd/neofs-adm/internal/modules/autocomplete.go +++ /dev/null @@ -1,58 +0,0 @@ -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 94c7bdcfd..da4778ce7 100644 --- a/cmd/neofs-adm/internal/modules/root.go +++ b/cmd/neofs-adm/internal/modules/root.go @@ -6,6 +6,7 @@ import ( "github.com/nspcc-dev/neofs-node/cmd/neofs-adm/internal/modules/config" "github.com/nspcc-dev/neofs-node/cmd/neofs-adm/internal/modules/morph" "github.com/nspcc-dev/neofs-node/misc" + "github.com/nspcc-dev/neofs-node/pkg/util/autocomplete" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -34,7 +35,7 @@ func init() { rootCmd.AddCommand(config.RootCmd) rootCmd.AddCommand(morph.RootCmd) - rootCmd.AddCommand(completionCmd) + rootCmd.AddCommand(autocomplete.Command("neofs-adm")) } func Execute() error { diff --git a/cmd/neofs-cli/modules/completion.go b/cmd/neofs-cli/modules/completion.go index 2a45d5c92..d551ad9b0 100644 --- a/cmd/neofs-cli/modules/completion.go +++ b/cmd/neofs-cli/modules/completion.go @@ -1,62 +1,9 @@ package cmd import ( - "os" - - "github.com/spf13/cobra" + "github.com/nspcc-dev/neofs-node/pkg/util/autocomplete" ) -var completionCmd = &cobra.Command{ - Use: "completion [bash|zsh|fish|powershell]", - Short: "Generate completion script", - Long: `To load completions: - -Bash: - -$ source <(neofs-cli completion bash) - -# To load completions for each session, execute once: -Linux: - $ neofs-cli completion bash > /etc/bash_completion.d/neofs-cli -MacOS: - $ neofs-cli completion bash > /usr/local/etc/bash_completion.d/neofs-cli - -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-cli completion zsh > "${fpath[1]}/_neofs-cli" - -# You will need to start a new shell for this setup to take effect. - -Fish: - -$ neofs-cli completion fish | source - -# To load completions for each session, execute once: -$ neofs-cli completion fish > ~/.config/fish/completions/neofs-cli.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) - } - }, -} - func init() { - rootCmd.AddCommand(completionCmd) + rootCmd.AddCommand(autocomplete.Command("neofs-cli")) } diff --git a/pkg/util/autocomplete/autocomplete.go b/pkg/util/autocomplete/autocomplete.go new file mode 100644 index 000000000..5d9083c0b --- /dev/null +++ b/pkg/util/autocomplete/autocomplete.go @@ -0,0 +1,65 @@ +package autocomplete + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" +) + +const longHelpTemplate = `To load completions: + +Bash: + +$ source <(%s completion bash) + +# To load completions for each session, execute once: +Linux: + $ %s completion bash > /etc/bash_completion.d/%s +MacOS: + $ %s completion bash > /usr/local/etc/bash_completion.d/%s + +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: +$ %s completion zsh > "${fpath[1]}/_%s" + +# You will need to start a new shell for this setup to take effect. + +Fish: + +$ %s completion fish | source + +# To load completions for each session, execute once: +$ %s completion fish > ~/.config/fish/completions/%s.fish +` + +// Command returns cobra command structure for autocomplete routine. +func Command(name string) *cobra.Command { + return &cobra.Command{ + Use: "completion [bash|zsh|fish|powershell]", + Short: "Generate completion script", + Long: fmt.Sprintf(longHelpTemplate, + name, name, name, name, name, name, name, name, name, name), + 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) + } + }, + } +}