@@ -675,6 +675,51 @@ pub mod groups {
675
675
:: getopts:: getopts ( args, opts. map ( |x| x. long_to_short ( ) ) )
676
676
}
677
677
678
+ fn format_option ( opt : & OptGroup ) -> ~str {
679
+ let mut line = ~"";
680
+
681
+ if opt. occur != Req {
682
+ line. push_char ( '[' ) ;
683
+ }
684
+
685
+ // Use short_name is possible, but fallback to long_name.
686
+ if opt. short_name . len ( ) > 0 {
687
+ line. push_char ( '-' ) ;
688
+ line. push_str ( opt. short_name ) ;
689
+ } else {
690
+ line. push_str ( "--" ) ;
691
+ line. push_str ( opt. long_name ) ;
692
+ }
693
+
694
+ if opt. hasarg != No {
695
+ line. push_char ( ' ' ) ;
696
+ if opt. hasarg == Maybe {
697
+ line. push_char ( '[' ) ;
698
+ }
699
+ line. push_str ( opt. hint ) ;
700
+ if opt. hasarg == Maybe {
701
+ line. push_char ( ']' ) ;
702
+ }
703
+ }
704
+
705
+ if opt. occur != Req {
706
+ line. push_char ( ']' ) ;
707
+ }
708
+ if opt. occur == Multi {
709
+ line. push_str ( ".." ) ;
710
+ }
711
+
712
+ line
713
+ }
714
+
715
+ /// Derive a short one-line usage summary from a set of long options.
716
+ pub fn short_usage ( program_name : & str , opts : & [ OptGroup ] ) -> ~str {
717
+ let mut line = ~"Usage : " + program_name + " ";
718
+ line.push_str(opts.iter().map(format_option).to_owned_vec().connect(" "));
719
+
720
+ line
721
+ }
722
+
678
723
/// Derive a usage message from a set of long options.
679
724
pub fn usage(brief: &str, opts: &[OptGroup]) -> ~str {
680
725
@@ -1637,4 +1682,23 @@ Options:
1637
1682
debug!(" generated: <<{ } >>", usage);
1638
1683
assert!(usage == expected)
1639
1684
}
1685
+
1686
+ #[test]
1687
+ fn test_short_usage() {
1688
+ let optgroups = ~[
1689
+ groups::reqopt(" b", " banana", " Desc ", " VAL "),
1690
+ groups::optopt(" a", " 012345678901234567890123456789 ",
1691
+ " Desc ", " VAL "),
1692
+ groups::optflag(" k", " kiwi", " Desc "),
1693
+ groups::optflagopt(" p", " ", " Desc ", " VAL "),
1694
+ groups::optmulti(" l", " ", " Desc ", " VAL "),
1695
+ ];
1696
+
1697
+ let expected = ~" Usage : fruits -b VAL [ -a VAL ] [ -k] [ -p [ VAL ] ] [ -l VAL ] ..";
1698
+ let generated_usage = groups::short_usage(" fruits", optgroups);
1699
+
1700
+ debug!(" expected: <<{ } >>", expected);
1701
+ debug!(" generated: <<{ } >>" , generated_usage) ;
1702
+ assert_eq ! ( generated_usage, expected) ;
1703
+ }
1640
1704
}
0 commit comments