@@ -1398,9 +1398,16 @@ pub enum OptionKind {
13981398}
13991399
14001400pub struct RustcOptGroup {
1401- apply : Box < dyn Fn ( & mut getopts:: Options ) -> & mut getopts:: Options > ,
1401+ /// Display name for this option. Normally equal to `long_name`, except for
1402+ /// options that don't have a long name.
14021403 pub name : & ' static str ,
14031404 stability : OptionStability ,
1405+ kind : OptionKind ,
1406+
1407+ short_name : & ' static str ,
1408+ long_name : & ' static str ,
1409+ desc : & ' static str ,
1410+ value_hint : & ' static str ,
14041411}
14051412
14061413impl RustcOptGroup {
@@ -1409,7 +1416,13 @@ impl RustcOptGroup {
14091416 }
14101417
14111418 pub fn apply ( & self , options : & mut getopts:: Options ) {
1412- ( self . apply ) ( options) ;
1419+ let & Self { short_name, long_name, desc, value_hint, .. } = self ;
1420+ match self . kind {
1421+ OptionKind :: Opt => options. optopt ( short_name, long_name, desc, value_hint) ,
1422+ OptionKind :: Multi => options. optmulti ( short_name, long_name, desc, value_hint) ,
1423+ OptionKind :: Flag => options. optflag ( short_name, long_name, desc) ,
1424+ OptionKind :: FlagMulti => options. optflagmulti ( short_name, long_name, desc) ,
1425+ } ;
14131426 }
14141427}
14151428
@@ -1419,31 +1432,21 @@ pub fn make_opt(
14191432 short_name : & ' static str ,
14201433 long_name : & ' static str ,
14211434 desc : & ' static str ,
1422- hint : & ' static str ,
1435+ value_hint : & ' static str ,
14231436) -> RustcOptGroup {
1437+ // "Flag" options don't have a value, and therefore don't have a value hint.
1438+ match kind {
1439+ OptionKind :: Opt | OptionKind :: Multi => { }
1440+ OptionKind :: Flag | OptionKind :: FlagMulti => assert_eq ! ( value_hint, "" ) ,
1441+ }
14241442 RustcOptGroup {
14251443 name : cmp:: max_by_key ( short_name, long_name, |s| s. len ( ) ) ,
14261444 stability,
1427- apply : match kind {
1428- OptionKind :: Opt => Box :: new ( move |opts : & mut getopts:: Options | {
1429- opts. optopt ( short_name, long_name, desc, hint)
1430- } ) ,
1431- OptionKind :: Multi => Box :: new ( move |opts : & mut getopts:: Options | {
1432- opts. optmulti ( short_name, long_name, desc, hint)
1433- } ) ,
1434- OptionKind :: Flag => {
1435- assert_eq ! ( hint, "" ) ;
1436- Box :: new ( move |opts : & mut getopts:: Options | {
1437- opts. optflag ( short_name, long_name, desc)
1438- } )
1439- }
1440- OptionKind :: FlagMulti => {
1441- assert_eq ! ( hint, "" ) ;
1442- Box :: new ( move |opts : & mut getopts:: Options | {
1443- opts. optflagmulti ( short_name, long_name, desc)
1444- } )
1445- }
1446- } ,
1445+ kind,
1446+ short_name,
1447+ long_name,
1448+ desc,
1449+ value_hint,
14471450 }
14481451}
14491452
0 commit comments