@@ -61,7 +61,7 @@ func NewArgParser(logger log.TraceLogger, usageString string) *argParser {
61
61
fmt .Fprint (out , "\n " )
62
62
}
63
63
64
- // Print subcommands (if any)
64
+ // Print subcommands or positional args (if any)
65
65
if len (a .subcommands ) > 0 {
66
66
if a .isTopLevel {
67
67
fmt .Fprintln (out , "Commands:" )
@@ -70,6 +70,10 @@ func NewArgParser(logger log.TraceLogger, usageString string) *argParser {
70
70
}
71
71
a .printSubcommands ()
72
72
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 " )
73
77
}
74
78
}
75
79
@@ -94,6 +98,21 @@ func (a *argParser) Subcommand(subcommand Subcommand) {
94
98
a .subcommands [subcommand .Name ()] = subcommand
95
99
}
96
100
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
+
97
116
func (a * argParser ) PositionalStringVar (name string , description string , arg * string , required bool ) {
98
117
a .positionalArgs = append (a .positionalArgs , & positionalArg {
99
118
name : name ,
0 commit comments