@@ -464,31 +464,9 @@ impl<'a> StripUnconfigured<'a> {
464
464
return true ;
465
465
}
466
466
} ;
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
+ } )
492
470
} )
493
471
}
494
472
@@ -532,6 +510,32 @@ impl<'a> StripUnconfigured<'a> {
532
510
}
533
511
}
534
512
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
+
535
539
fn is_cfg ( sess : & Session , attr : & Attribute ) -> bool {
536
540
sess. check_name ( attr, sym:: cfg)
537
541
}
0 commit comments