Skip to content

Commit

Permalink
feat: add completion command
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
b4nst authored and mpvl committed Jul 3, 2020
1 parent 57f8242 commit 9ebfa80
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 3 deletions.
79 changes: 79 additions & 0 deletions cmd/cue/cmd/completion.go
Original file line number Diff line number Diff line change
@@ -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
}
1 change: 1 addition & 0 deletions cmd/cue/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ For more information on writing CUE configuration files see cuelang.org.`,

subCommands := []*cobra.Command{
cmdCmd,
newCompletionCmd(c),
newEvalCmd(c),
newDefCmd(c),
newExportCmd(c),
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ require (
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
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k
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=
Expand Down

0 comments on commit 9ebfa80

Please sign in to comment.