@@ -47,8 +47,7 @@ type Command struct {
4747 // is called.
4848 Exec func (ctx context.Context , s * State ) error
4949
50- state * State
51- // TODO(mf): remove this in favor of tracking the selected *Command in the state
50+ state * State
5251 selected * Command
5352}
5453
@@ -94,15 +93,13 @@ func (c *Command) showHelp() error {
9493 return nil
9594 }
9695
97- // Display command description first if available, with wrapping
9896 if c .ShortHelp != "" {
9997 for _ , line := range wrapText (c .ShortHelp , 80 ) {
10098 fmt .Fprintf (w , "%s\n " , line )
10199 }
102100 fmt .Fprintln (w )
103101 }
104102
105- // Show usage pattern
106103 fmt .Fprintf (w , "Usage:\n " )
107104 if c .Usage != "" {
108105 fmt .Fprintf (w , "%s\n " , c .Usage )
@@ -118,7 +115,6 @@ func (c *Command) showHelp() error {
118115 }
119116 fmt .Fprintln (w )
120117
121- // Show available subcommands
122118 if len (c .SubCommands ) > 0 {
123119 fmt .Fprintf (w , "Available Commands:\n " )
124120
@@ -155,7 +151,6 @@ func (c *Command) showHelp() error {
155151 fmt .Fprintln (w )
156152 }
157153
158- // Collect and format all flags
159154 type flagInfo struct {
160155 name string
161156 usage string
@@ -176,12 +171,12 @@ func (c *Command) showHelp() error {
176171 })
177172 }
178173
179- // Global flags
180- if c .state .parent != nil {
174+ // Global flags from parent commands
175+ if c .state != nil && c . state .parent != nil {
181176 p := c .state .parent
182177 for p != nil {
183- if p .flags != nil {
184- p .flags .VisitAll (func (f * flag.Flag ) {
178+ if p .cmd != nil && p . cmd . Flags != nil {
179+ p .cmd . Flags .VisitAll (func (f * flag.Flag ) {
185180 flags = append (flags , flagInfo {
186181 name : "-" + f .Name ,
187182 usage : f .Usage ,
@@ -195,12 +190,10 @@ func (c *Command) showHelp() error {
195190 }
196191
197192 if len (flags ) > 0 {
198- // Sort flags by name
199193 slices .SortFunc (flags , func (a , b flagInfo ) int {
200194 return cmp .Compare (a .name , b .name )
201195 })
202196
203- // Find the longest flag name for alignment
204197 maxLen := 0
205198 for _ , f := range flags {
206199 if len (f .name ) > maxLen {
@@ -218,28 +211,22 @@ func (c *Command) showHelp() error {
218211 }
219212 }
220213
221- // Print local flags first
222214 if hasLocal {
223215 fmt .Fprintf (w , "Flags:\n " )
224216 for _ , f := range flags {
225217 if ! f .global {
226218 nameWidth := maxLen + 4
227219 wrapWidth := 80 - nameWidth
228220
229- // Prepare the usage text with default value if needed
230221 usageText := f .usage
231222 if f .defval != "" && f .defval != "false" {
232223 usageText += fmt .Sprintf (" (default %s)" , f .defval )
233224 }
234225
235- // Wrap the usage text
236226 lines := wrapText (usageText , wrapWidth )
237-
238- // Print first line with flag name
239227 padding := strings .Repeat (" " , maxLen - len (f .name )+ 4 )
240228 fmt .Fprintf (w , " %s%s%s\n " , f .name , padding , lines [0 ])
241229
242- // Print subsequent lines with proper padding
243230 indentPadding := strings .Repeat (" " , nameWidth + 2 )
244231 for _ , line := range lines [1 :] {
245232 fmt .Fprintf (w , "%s%s\n " , indentPadding , line )
@@ -249,28 +236,22 @@ func (c *Command) showHelp() error {
249236 fmt .Fprintln (w )
250237 }
251238
252- // Then print global flags
253239 if hasGlobal {
254240 fmt .Fprintf (w , "Global Flags:\n " )
255241 for _ , f := range flags {
256242 if f .global {
257243 nameWidth := maxLen + 4
258244 wrapWidth := 80 - nameWidth
259245
260- // Prepare the usage text with default value if needed
261246 usageText := f .usage
262247 if f .defval != "" && f .defval != "false" {
263248 usageText += fmt .Sprintf (" (default %s)" , f .defval )
264249 }
265250
266- // Wrap the usage text
267251 lines := wrapText (usageText , wrapWidth )
268-
269- // Print first line with flag name
270252 padding := strings .Repeat (" " , maxLen - len (f .name )+ 4 )
271253 fmt .Fprintf (w , " %s%s%s\n " , f .name , padding , lines [0 ])
272254
273- // Print subsequent lines with proper padding
274255 indentPadding := strings .Repeat (" " , nameWidth + 2 )
275256 for _ , line := range lines [1 :] {
276257 fmt .Fprintf (w , "%s%s\n " , indentPadding , line )
@@ -281,7 +262,6 @@ func (c *Command) showHelp() error {
281262 }
282263 }
283264
284- // Show help hint for subcommands
285265 if len (c .SubCommands ) > 0 {
286266 fmt .Fprintf (w , "Use \" %s [command] --help\" for more information about a command.\n " , c .Name )
287267 }
0 commit comments