Skip to content

Commit 2b7b894

Browse files
committed
argparse: print positional arg details in usage
Add a printout of positional args (name, description, '(optional)' or not) in the 'Usage()' string. Signed-off-by: Victoria Dye <[email protected]>
1 parent 4425984 commit 2b7b894

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

internal/argparse/argparse.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func NewArgParser(logger log.TraceLogger, usageString string) *argParser {
6161
fmt.Fprint(out, "\n")
6262
}
6363

64-
// Print subcommands (if any)
64+
// Print subcommands or positional args (if any)
6565
if len(a.subcommands) > 0 {
6666
if a.isTopLevel {
6767
fmt.Fprintln(out, "Commands:")
@@ -70,6 +70,10 @@ func NewArgParser(logger log.TraceLogger, usageString string) *argParser {
7070
}
7171
a.printSubcommands()
7272
fmt.Fprint(out, "\n")
73+
} else if len(a.positionalArgs) > 0 {
74+
fmt.Fprintln(out, "Positional arguments:")
75+
a.printPositionalArgs()
76+
fmt.Fprint(out, "\n")
7377
}
7478
}
7579

@@ -94,6 +98,21 @@ func (a *argParser) Subcommand(subcommand Subcommand) {
9498
a.subcommands[subcommand.Name()] = subcommand
9599
}
96100

101+
func (a *argParser) printPositionalArgs() {
102+
out := a.FlagSet.Output()
103+
for _, arg := range a.positionalArgs {
104+
optionalStr := ""
105+
if !arg.required {
106+
optionalStr = "(optional) "
107+
}
108+
fmt.Fprintf(out, " %s\n \t%s%s\n",
109+
arg.name,
110+
optionalStr,
111+
strings.ReplaceAll(strings.TrimSpace(arg.description), "\n", "\n \t"),
112+
)
113+
}
114+
}
115+
97116
func (a *argParser) PositionalStringVar(name string, description string, arg *string, required bool) {
98117
a.positionalArgs = append(a.positionalArgs, &positionalArg{
99118
name: name,

0 commit comments

Comments
 (0)