diff options
| author | Eyal Posener <[email protected]> | 2019-11-14 06:51:44 +0200 |
|---|---|---|
| committer | Eyal Posener <[email protected]> | 2019-11-18 01:05:47 +0200 |
| commit | 8724aaf18312e54750540a9578e00d61b1c545d8 (patch) | |
| tree | d3e736b4fb279975bbcc017ae1bad53e454c5773 /flags.go | |
| parent | 05b68ffc813dd10c420993cb1cf927b346c057b8 (diff) | |
V2
Diffstat (limited to 'flags.go')
| -rw-r--r-- | flags.go | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/flags.go b/flags.go new file mode 100644 index 0000000..7658061 --- /dev/null +++ b/flags.go @@ -0,0 +1,44 @@ +package complete + +import ( + "flag" +) + +// Complete default command line flag set defined by the standard library. +func CommandLine(name string) { + Complete(name, FlagSet(flag.CommandLine)) +} + +// FlagSet returns a completer for a given standard library `flag.FlagSet`. It completes flag names, +// and additionally completes value if the `flag.Value` implements the `Predicate` interface. +func FlagSet(flags *flag.FlagSet) Completer { + return (*flagSet)(flags) +} + +type flagSet flag.FlagSet + +func (fs *flagSet) SubCmdList() []string { return nil } + +func (fs *flagSet) SubCmdGet(cmd string) Completer { return nil } + +func (fs *flagSet) FlagList() []string { + var flags []string + (*flag.FlagSet)(fs).VisitAll(func(f *flag.Flag) { + flags = append(flags, f.Name) + }) + return flags +} + +func (fs *flagSet) FlagGet(name string) Predictor { + f := (*flag.FlagSet)(fs).Lookup(name) + if f == nil { + return nil + } + p, ok := f.Value.(Predictor) + if !ok { + return PredictFunc(func(string) []string { return []string{""} }) + } + return p +} + +func (fs *flagSet) ArgsGet() Predictor { return nil } |
