@@ -614,9 +614,9 @@ define method parse-command-line
614
614
add-option(parser, parser.help-option);
615
615
end ;
616
616
block ()
617
- %parse-command-line(parser, argv);
617
+ %parse-command-line(parser, argv, usage, description );
618
618
exception (ex :: <usage-error>)
619
- if (do-help?)
619
+ if (do-help? & ~ instance? (ex, <help-requested>) )
620
620
format(*standard-error*,
621
621
"Error: %s\n Use %s to see command-line options.\n " ,
622
622
ex,
@@ -631,15 +631,11 @@ define method parse-command-line
631
631
end ;
632
632
signal (ex)
633
633
end ;
634
- if (do-help? & parser.help-option.option-value)
635
- print-synopsis(parser, *standard-output*,
636
- usage: usage, description: description);
637
- error (make (<help-requested>));
638
- end ;
639
634
end method parse-command-line;
640
635
641
636
define function %parse-command-line
642
- (parser :: <command-line-parser>, argv :: <sequence> )
637
+ (parser :: <command-line-parser>, argv :: <sequence> ,
638
+ usage :: false-or (<string> ), description :: false-or (<string> ))
643
639
=> ()
644
640
// Split our args around '--' and chop them around '='.
645
641
let (clean-args, extra-args) = split-args(argv);
@@ -676,6 +672,13 @@ define function %parse-command-line
676
672
end select ;
677
673
end while ;
678
674
675
+ // Handle help prior to validating positional options.
676
+ if (parser.provide-help-option? & parser.help-option.option-value)
677
+ print-synopsis(parser, *standard-output*,
678
+ usage: usage, description: description);
679
+ error (make (<help-requested>));
680
+ end ;
681
+
679
682
// And append any more positional options from after the '--'.
680
683
for (arg in extra-args)
681
684
parser.positional-options := add! (parser.positional-options, arg);
0 commit comments