| package completion |
| |
| import ( |
| "fmt" |
| "io" |
| "os" |
| "strings" |
| |
| "github.com/alecthomas/kong" |
| ) |
| |
| // Completion command. |
| type Completion struct { |
| Bash Bash `cmd:"" help:"Generate the autocompletion script for bash"` |
| Zsh Zsh `cmd:"" help:"Generate the autocompletion script for zsh"` |
| Fish Fish `cmd:"" help:"Generate the autocompletion script for fish"` |
| } |
| |
| func commandName(cmd *kong.Node) string { |
| commandName := cmd.FullPath() |
| commandName = strings.ReplaceAll(commandName, " ", "_") |
| commandName = strings.ReplaceAll(commandName, ":", "__") |
| return commandName |
| } |
| |
| func hasCommands(cmd *kong.Node) bool { |
| for _, c := range cmd.Children { |
| if !c.Hidden { |
| return true |
| } |
| } |
| return false |
| } |
| |
| //nolint:deadcode,unused |
| func isArgument(cmd *kong.Node) bool { |
| return cmd.Type == kong.ArgumentNode |
| } |
| |
| // writeString writes a string into a buffer, and checks if the error is not nil. |
| func writeString(b io.StringWriter, s string) { |
| if _, err := b.WriteString(s); err != nil { |
| fmt.Fprintln(os.Stderr, "Error:", err) |
| os.Exit(1) |
| } |
| } |
| |
| func nonCompletableFlag(flag *kong.Flag) bool { |
| return flag.Hidden |
| } |
| |
| func flagPossibleValues(flag *kong.Flag) []string { |
| values := make([]string, 0) |
| for _, enum := range flag.EnumSlice() { |
| if strings.TrimSpace(enum) != "" { |
| values = append(values, enum) |
| } |
| } |
| return values |
| } |