mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 09:51:39 +00:00
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package complete
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/posener/complete/v2"
|
|
"github.com/posener/complete/v2/predict"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/pflag"
|
|
"sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands"
|
|
"sigs.k8s.io/kustomize/kyaml/errors"
|
|
)
|
|
|
|
// NewCommand returns a new install-completion command
|
|
func NewCommand() *cobra.Command {
|
|
return &cobra.Command{
|
|
Use: "install-completion",
|
|
Short: commands.CompletionShort,
|
|
Long: commands.CompletionLong,
|
|
PreRunE: preRunE,
|
|
Run: run,
|
|
}
|
|
}
|
|
|
|
func preRunE(cmd *cobra.Command, args []string) error {
|
|
// install by default
|
|
if os.Getenv("COMP_INSTALL") == "" {
|
|
if err := errors.Wrap(os.Setenv("COMP_INSTALL", "1")); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func run(cmd *cobra.Command, args []string) {
|
|
// find the root command
|
|
for cmd.Parent() != nil {
|
|
cmd = cmd.Parent()
|
|
}
|
|
|
|
// do completion
|
|
Complete(cmd).Complete("kustomize")
|
|
}
|
|
|
|
// Complete returns a completion command for a cobra command
|
|
func Complete(cmd *cobra.Command) *complete.Command {
|
|
cc := &complete.Command{
|
|
Flags: map[string]complete.Predictor{},
|
|
Sub: map[string]*complete.Command{},
|
|
}
|
|
if strings.Contains(cmd.Use, "DIR") {
|
|
// if usage contains directory, then use a file predictor
|
|
cc.Args = predict.Dirs("*")
|
|
}
|
|
|
|
// add completion for each subcommand
|
|
for i := range cmd.Commands() {
|
|
c := cmd.Commands()[i]
|
|
name := strings.Split(c.Use, " ")[0]
|
|
cc.Sub[name] = Complete(c)
|
|
}
|
|
|
|
// add completion for each flag
|
|
cmd.Flags().VisitAll(func(flag *pflag.Flag) {
|
|
cc.Flags[flag.Name] = predict.Nothing
|
|
})
|
|
return cc
|
|
}
|