feat: add completion command
Add a command to generate a completion script for bash, zsh, fish and powershell shells.
In order to generate the fish script the cobra package has been bumped to 1.0.0
Change-Id: Ie38e4754e74bc6ea9784e5ea4375d8d41abf3b04
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/6380
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/cue/cmd/completion.go b/cmd/cue/cmd/completion.go
new file mode 100644
index 0000000..3deca46
--- /dev/null
+++ b/cmd/cue/cmd/completion.go
@@ -0,0 +1,79 @@
+// Copyright 2019 CUE Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package cmd
+
+import (
+ "fmt"
+
+ "github.com/spf13/cobra"
+)
+
+var validCompletionArgs = []string{"bash", "zsh", "fish", "powershell"}
+
+const completionExample = `
+Bash:
+
+$ source <(cue completion bash)
+
+# To load completions for each session, execute once:
+Linux:
+ $ cue completion bash > /etc/bash_completion.d/cue
+MacOS:
+ $ cue completion bash > /usr/local/etc/bash_completion.d/cue
+
+Zsh:
+
+$ source <(cue completion zsh)
+
+# To load completions for each session, execute once:
+$ cue completion zsh > "${fpath[1]}/_cue"
+
+Fish:
+
+$ cue completion fish | source
+
+# To load completions for each session, execute once:
+$ cue completion fish > ~/.config/fish/completions/cue.fish
+`
+
+func newCompletionCmd(c *Command) *cobra.Command {
+ cmd := &cobra.Command{
+ Use: fmt.Sprintf("completion %s", validCompletionArgs),
+ Short: "Generate completion script",
+ Long: ``,
+ Example: completionExample,
+ ValidArgs: validCompletionArgs,
+ Args: cobra.ExactValidArgs(1),
+ RunE: mkRunE(c, runCompletion),
+ }
+ return cmd
+}
+
+func runCompletion(cmd *Command, args []string) error {
+ w := cmd.OutOrStdout()
+ switch args[0] {
+ case "bash":
+ cmd.Root().GenBashCompletion(w)
+ case "zsh":
+ cmd.Root().GenZshCompletion(w)
+ case "fish":
+ cmd.Root().GenFishCompletion(w, true)
+ case "powershell":
+ cmd.Root().GenPowerShellCompletion(w)
+ default:
+ return fmt.Errorf("%s is not a supported shell", args[0])
+ }
+ return nil
+}
diff --git a/cmd/cue/cmd/root.go b/cmd/cue/cmd/root.go
index f7497dd..fd65bed 100644
--- a/cmd/cue/cmd/root.go
+++ b/cmd/cue/cmd/root.go
@@ -88,6 +88,7 @@
subCommands := []*cobra.Command{
cmdCmd,
+ newCompletionCmd(c),
newEvalCmd(c),
newDefCmd(c),
newExportCmd(c),
diff --git a/go.mod b/go.mod
index 43b48b9..6d02bdd 100644
--- a/go.mod
+++ b/go.mod
@@ -11,7 +11,7 @@
github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de
github.com/pkg/errors v0.8.1 // indirect
github.com/rogpeppe/go-internal v1.6.0
- github.com/spf13/cobra v0.0.7
+ github.com/spf13/cobra v1.0.0
github.com/spf13/pflag v1.0.3
github.com/stretchr/testify v1.2.2
golang.org/x/exp v0.0.0-20200513190911-00229845015e
diff --git a/go.sum b/go.sum
index 519de26..ce97cc0 100644
--- a/go.sum
+++ b/go.sum
@@ -99,8 +99,8 @@
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cobra v0.0.7 h1:FfTH+vuMXOas8jmfb5/M7dzEYx7LpcLb7a0LPe34uOU=
-github.com/spf13/cobra v0.0.7/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
+github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
+github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=