@@ -269,6 +269,31 @@ class BoxedArgumentDescriptor {
269269 let description : String ?
270270 let `default` : String ?
271271 let type : ArgumentType
272+ let flag : Character ?
273+
274+ var summary : String {
275+ var line = " "
276+
277+ switch type {
278+ case . argument:
279+ line += " \( name) "
280+ case . option:
281+ if let flag = flag {
282+ line += " - \( flag) , "
283+ }
284+ line += " -- \( name) "
285+ }
286+
287+ if let `default` = `default` {
288+ line += " [default: \( `default`) ] "
289+ }
290+
291+ if let description = description {
292+ line += " - \( description) "
293+ }
294+
295+ return line
296+ }
272297
273298 init < T : ArgumentDescriptor > ( value: T ) {
274299 name = value. name
@@ -277,10 +302,13 @@ class BoxedArgumentDescriptor {
277302
278303 if let value = value as? Flag {
279304 `default` = value. `default`. description
305+ flag = value. flag
280306 } else if let value = value as? Option < String > {
281307 `default` = value. `default`. description
308+ flag = nil
282309 } else if let value = value as? Option < Int > {
283310 `default` = value. `default`. description
311+ flag = nil
284312 } else {
285313 let mirror = Mirror ( reflecting: value)
286314
@@ -289,6 +317,8 @@ class BoxedArgumentDescriptor {
289317 } else {
290318 `default` = nil
291319 }
320+
321+ flag = nil
292322 }
293323 }
294324}
@@ -362,32 +392,14 @@ class Help : Error, ANSIConvertible, CustomStringConvertible {
362392 } else if !arguments. isEmpty {
363393 output. append ( " Arguments: " )
364394 output. append ( " " )
365-
366- output += arguments. map { argument in
367- if let description = argument. description {
368- return " \( argument. name) - \( description) "
369- } else {
370- return " \( argument. name) "
371- }
372- }
373-
395+ output += arguments. map { " \( $0. summary) " }
374396 output. append ( " " )
375397 }
376398
377399 if !options. isEmpty {
378400 output. append ( " Options: " )
379401 for option in options {
380- var line = " -- \( option. name) "
381-
382- if let `default` = option. default {
383- line += " [default: \( `default`) ] "
384- }
385-
386- if let description = option. description {
387- line += " - \( description) "
388- }
389-
390- output. append ( line)
402+ output. append ( " \( option. summary) " )
391403 }
392404 }
393405
0 commit comments