aboutsummaryrefslogtreecommitdiffhomepage
path: root/command/flag.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-02-23 02:25:31 +0900
committerOphestra <cat@gensokyo.uk>2025-02-23 02:25:31 +0900
commit89970f51970b320430852ed57dcfc9d6c841322e (patch)
tree5119243e0a5c0f542be845fe4d621657cdf92aaa /command/flag.go
parent35037705a90b61ac52a38f6f41ce48b071537143 (diff)
command/flag: implement repeatable flag
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'command/flag.go')
-rw-r--r--command/flag.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/command/flag.go b/command/flag.go
index 8e890a1a..cb85a648 100644
--- a/command/flag.go
+++ b/command/flag.go
@@ -44,6 +44,26 @@ func (v BoolFlag) Define(b *strings.Builder, set *flag.FlagSet, p any, name, usa
b.WriteString(" [" + prettyFlag(name) + "]")
}
+// RepeatableFlag implements an ordered, repeatable string flag.
+type RepeatableFlag []string
+
+func (r *RepeatableFlag) String() string {
+ if r == nil {
+ return "<nil>"
+ }
+ return strings.Join(*r, " ")
+}
+
+func (r *RepeatableFlag) Set(v string) error {
+ *r = append(*r, v)
+ return nil
+}
+
+func (r *RepeatableFlag) Define(b *strings.Builder, set *flag.FlagSet, _ any, name, usage string) {
+ set.Var(r, name, usage)
+ b.WriteString(" [" + prettyFlag(name) + " <value>]")
+}
+
// this has no effect on parse outcome
func prettyFlag(name string) string {
switch len(name) {