summaryrefslogtreecommitdiff
path: root/flags.go
diff options
context:
space:
mode:
authorEyal Posener <[email protected]>2019-11-14 06:51:44 +0200
committerEyal Posener <[email protected]>2019-11-18 01:05:47 +0200
commit8724aaf18312e54750540a9578e00d61b1c545d8 (patch)
treed3e736b4fb279975bbcc017ae1bad53e454c5773 /flags.go
parent05b68ffc813dd10c420993cb1cf927b346c057b8 (diff)
V2
Diffstat (limited to 'flags.go')
-rw-r--r--flags.go44
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 }