@@ -464,31 +464,9 @@ impl<'a> StripUnconfigured<'a> {
464464 return true ;
465465 }
466466 } ;
467- let error = |span, msg, suggestion : & str | {
468- let mut err = self . sess . parse_sess . span_diagnostic . struct_span_err ( span, msg) ;
469- if !suggestion. is_empty ( ) {
470- err. span_suggestion (
471- span,
472- "expected syntax is" ,
473- suggestion. into ( ) ,
474- Applicability :: MaybeIncorrect ,
475- ) ;
476- }
477- err. emit ( ) ;
478- true
479- } ;
480- let span = meta_item. span ;
481- match meta_item. meta_item_list ( ) {
482- None => error ( span, "`cfg` is not followed by parentheses" , "cfg(/* predicate */)" ) ,
483- Some ( [ ] ) => error ( span, "`cfg` predicate is not specified" , "" ) ,
484- Some ( [ _, .., l] ) => error ( l. span ( ) , "multiple `cfg` predicates are specified" , "" ) ,
485- Some ( [ single] ) => match single. meta_item ( ) {
486- Some ( meta_item) => {
487- attr:: cfg_matches ( meta_item, & self . sess . parse_sess , self . features )
488- }
489- None => error ( single. span ( ) , "`cfg` predicate key cannot be a literal" , "" ) ,
490- } ,
491- }
467+ parse_cfg ( & meta_item, & self . sess ) . map_or ( true , |meta_item| {
468+ attr:: cfg_matches ( & meta_item, & self . sess . parse_sess , self . features )
469+ } )
492470 } )
493471 }
494472
@@ -532,6 +510,32 @@ impl<'a> StripUnconfigured<'a> {
532510 }
533511}
534512
513+ pub fn parse_cfg < ' a > ( meta_item : & ' a MetaItem , sess : & Session ) -> Option < & ' a MetaItem > {
514+ let error = |span, msg, suggestion : & str | {
515+ let mut err = sess. parse_sess . span_diagnostic . struct_span_err ( span, msg) ;
516+ if !suggestion. is_empty ( ) {
517+ err. span_suggestion (
518+ span,
519+ "expected syntax is" ,
520+ suggestion. into ( ) ,
521+ Applicability :: HasPlaceholders ,
522+ ) ;
523+ }
524+ err. emit ( ) ;
525+ None
526+ } ;
527+ let span = meta_item. span ;
528+ match meta_item. meta_item_list ( ) {
529+ None => error ( span, "`cfg` is not followed by parentheses" , "cfg(/* predicate */)" ) ,
530+ Some ( [ ] ) => error ( span, "`cfg` predicate is not specified" , "" ) ,
531+ Some ( [ _, .., l] ) => error ( l. span ( ) , "multiple `cfg` predicates are specified" , "" ) ,
532+ Some ( [ single] ) => match single. meta_item ( ) {
533+ Some ( meta_item) => Some ( meta_item) ,
534+ None => error ( single. span ( ) , "`cfg` predicate key cannot be a literal" , "" ) ,
535+ } ,
536+ }
537+ }
538+
535539fn is_cfg ( sess : & Session , attr : & Attribute ) -> bool {
536540 sess. check_name ( attr, sym:: cfg)
537541}
0 commit comments