mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-14 17:02:49 +03:00
94a3be3e6e
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/1749 Co-authored-by: Aravind K P <8335904+scriptonist@users.noreply.github.com> GitOrigin-RevId: 4515f7f2c58b7f28645b2c5a5d9842aa7a844eae
100 lines
2.6 KiB
Go
100 lines
2.6 KiB
Go
package commands
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/hasura/graphql-engine/cli/v2"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
const completionCmdExample = `# Bash
|
|
# Linux
|
|
# Add Bash completion file using:
|
|
$ sudo hasura completion bash --file=/etc/bash_completion.d/hasura
|
|
# Mac
|
|
# Install bash-completion using homebrew:
|
|
$ brew install bash-completion
|
|
# Add to your ~/.bash_profile:
|
|
if [ -f $(brew --prefix)/etc/bash_completion ]; then
|
|
. $(brew --prefix)/etc/bash_completion
|
|
fi
|
|
# Add the completion file:
|
|
$ sudo hasura completion bash --file=$(brew --prefix)/etc/bash_completion.d/hasura
|
|
# Windows (Git Bash)
|
|
# open git bash
|
|
$ mkdir -p ~/.bash_completion.d
|
|
# Add the completion file:
|
|
$ cd ~ && hasura completion bash --file=.bash_completion.d/hasura
|
|
# Add the following to ~/.bash_profile
|
|
if [ -f ~/.bash_completion.d/hasura ]; then
|
|
. ~/.bash_completion.d/hasura
|
|
fi
|
|
# restart git bash
|
|
|
|
# Zsh (using oh-my-zsh)
|
|
$ mkdir -p $HOME/.oh-my-zsh/completions
|
|
$ hasura completion zsh --file=$HOME/.oh-my-zsh/completions/_hasura
|
|
|
|
# Reload the shell for the changes to take effect!`
|
|
|
|
// NewCompletionCmd return the completion command.
|
|
func NewCompletionCmd(ec *cli.ExecutionContext) *cobra.Command {
|
|
opts := &completionOptions{
|
|
EC: ec,
|
|
}
|
|
completionCmd := &cobra.Command{
|
|
Use: "completion [shell]",
|
|
Short: "Generate auto completion code",
|
|
Args: cobra.ExactArgs(1),
|
|
Long: "Output shell completion code for the specified shell (bash or zsh)",
|
|
SilenceUsage: true,
|
|
Example: completionCmdExample,
|
|
PreRunE: func(cmd *cobra.Command, args []string) error {
|
|
ec.Viper = viper.New()
|
|
return ec.Prepare()
|
|
},
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
opts.Shell = args[0]
|
|
opts.Cmd = cmd
|
|
return opts.run()
|
|
},
|
|
}
|
|
|
|
completionCmd.Flags().StringVar(&opts.File, "file", "", "file to which output has to be written")
|
|
return completionCmd
|
|
}
|
|
|
|
type completionOptions struct {
|
|
EC *cli.ExecutionContext
|
|
|
|
Shell string
|
|
File string
|
|
Cmd *cobra.Command
|
|
}
|
|
|
|
func (o *completionOptions) run() error {
|
|
var err error
|
|
switch o.Shell {
|
|
case "bash":
|
|
if o.File != "" {
|
|
err = o.Cmd.Root().GenBashCompletionFile(o.File)
|
|
} else {
|
|
err = o.Cmd.Root().GenBashCompletion(os.Stdout)
|
|
}
|
|
case "zsh":
|
|
if o.File != "" {
|
|
err = o.Cmd.Root().GenZshCompletionFile(o.File)
|
|
} else {
|
|
err = o.Cmd.Root().GenZshCompletion(os.Stdout)
|
|
}
|
|
default:
|
|
err = fmt.Errorf("unknown shell: %s. Use bash or zsh", o.Shell)
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|