@@ -67,7 +67,7 @@ impl Cfg {
6767 /// If the content is not properly formatted, it will return an error indicating what and where
6868 /// the error is.
6969 pub fn parse ( cfg : & MetaItem ) -> Result < Cfg , InvalidCfgError > {
70- let name = cfg. ident . name ;
70+ let name = cfg. name ( ) ;
7171 match cfg. node {
7272 MetaItemKind :: Word => Ok ( Cfg :: Cfg ( name, None ) ) ,
7373 MetaItemKind :: NameValue ( ref lit) => match lit. node {
@@ -436,6 +436,42 @@ mod test {
436436 Cfg :: Cfg ( Symbol :: intern ( name) , Some ( Symbol :: intern ( value) ) )
437437 }
438438
439+ fn dummy_meta_item_word ( name : & str ) -> MetaItem {
440+ MetaItem {
441+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( name) ) ,
442+ node : MetaItemKind :: Word ,
443+ span : DUMMY_SP ,
444+ }
445+ }
446+
447+ macro_rules! dummy_meta_item_list {
448+ ( $name: ident, [ $( $list: ident) ,* $( , ) * ] ) => {
449+ MetaItem {
450+ name: Path :: from_ident( DUMMY_SP , Ident :: from_str( stringify!( $name) ) ) ,
451+ node: MetaItemKind :: List ( vec![
452+ $(
453+ dummy_spanned( NestedMetaItemKind :: MetaItem (
454+ dummy_meta_item_word( stringify!( $list) ) ,
455+ ) ) ,
456+ ) *
457+ ] ) ,
458+ span: DUMMY_SP ,
459+ }
460+ } ;
461+
462+ ( $name: ident, [ $( $list: expr) ,* $( , ) * ] ) => {
463+ MetaItem {
464+ name: Path :: from_ident( DUMMY_SP , Ident :: from_str( stringify!( $name) ) ) ,
465+ node: MetaItemKind :: List ( vec![
466+ $(
467+ dummy_spanned( NestedMetaItemKind :: MetaItem ( $list) ) ,
468+ ) *
469+ ] ) ,
470+ span: DUMMY_SP ,
471+ }
472+ } ;
473+ }
474+
439475 #[ test]
440476 fn test_cfg_not ( ) {
441477 with_globals ( || {
@@ -561,15 +597,11 @@ mod test {
561597 #[ test]
562598 fn test_parse_ok ( ) {
563599 with_globals ( || {
564- let mi = MetaItem {
565- ident : Ident :: from_str ( "all" ) ,
566- node : MetaItemKind :: Word ,
567- span : DUMMY_SP ,
568- } ;
600+ let mi = dummy_meta_item_word ( "all" ) ;
569601 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "all" ) ) ) ;
570602
571603 let mi = MetaItem {
572- ident : Ident :: from_str ( "all" ) ,
604+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "all" ) ) ,
573605 node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Str (
574606 Symbol :: intern ( "done" ) ,
575607 StrStyle :: Cooked ,
@@ -578,111 +610,24 @@ mod test {
578610 } ;
579611 assert_eq ! ( Cfg :: parse( & mi) , Ok ( name_value_cfg( "all" , "done" ) ) ) ;
580612
581- let mi = MetaItem {
582- ident : Ident :: from_str ( "all" ) ,
583- node : MetaItemKind :: List ( vec ! [
584- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
585- ident: Ident :: from_str( "a" ) ,
586- node: MetaItemKind :: Word ,
587- span: DUMMY_SP ,
588- } ) ) ,
589- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
590- ident: Ident :: from_str( "b" ) ,
591- node: MetaItemKind :: Word ,
592- span: DUMMY_SP ,
593- } ) ) ,
594- ] ) ,
595- span : DUMMY_SP ,
596- } ;
613+ let mi = dummy_meta_item_list ! ( all, [ a, b] ) ;
597614 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) ) ) ;
598615
599- let mi = MetaItem {
600- ident : Ident :: from_str ( "any" ) ,
601- node : MetaItemKind :: List ( vec ! [
602- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
603- ident: Ident :: from_str( "a" ) ,
604- node: MetaItemKind :: Word ,
605- span: DUMMY_SP ,
606- } ) ) ,
607- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
608- ident: Ident :: from_str( "b" ) ,
609- node: MetaItemKind :: Word ,
610- span: DUMMY_SP ,
611- } ) ) ,
612- ] ) ,
613- span : DUMMY_SP ,
614- } ;
616+ let mi = dummy_meta_item_list ! ( any, [ a, b] ) ;
615617 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) | word_cfg( "b" ) ) ) ;
616618
617- let mi = MetaItem {
618- ident : Ident :: from_str ( "not" ) ,
619- node : MetaItemKind :: List ( vec ! [
620- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
621- ident: Ident :: from_str( "a" ) ,
622- node: MetaItemKind :: Word ,
623- span: DUMMY_SP ,
624- } ) ) ,
625- ] ) ,
626- span : DUMMY_SP ,
627- } ;
619+ let mi = dummy_meta_item_list ! ( not, [ a] ) ;
628620 assert_eq ! ( Cfg :: parse( & mi) , Ok ( !word_cfg( "a" ) ) ) ;
629621
630- let mi = MetaItem {
631- ident : Ident :: from_str ( "not" ) ,
632- node : MetaItemKind :: List ( vec ! [
633- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
634- ident: Ident :: from_str( "any" ) ,
635- node: MetaItemKind :: List ( vec![
636- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
637- ident: Ident :: from_str( "a" ) ,
638- node: MetaItemKind :: Word ,
639- span: DUMMY_SP ,
640- } ) ) ,
641- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
642- ident: Ident :: from_str( "all" ) ,
643- node: MetaItemKind :: List ( vec![
644- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
645- ident: Ident :: from_str( "b" ) ,
646- node: MetaItemKind :: Word ,
647- span: DUMMY_SP ,
648- } ) ) ,
649- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
650- ident: Ident :: from_str( "c" ) ,
651- node: MetaItemKind :: Word ,
652- span: DUMMY_SP ,
653- } ) ) ,
654- ] ) ,
655- span: DUMMY_SP ,
656- } ) ) ,
657- ] ) ,
658- span: DUMMY_SP ,
659- } ) ) ,
622+ let mi = dummy_meta_item_list ! ( not, [
623+ dummy_meta_item_list!( any, [
624+ dummy_meta_item_word( "a" ) ,
625+ dummy_meta_item_list!( all, [ b, c] ) ,
660626 ] ) ,
661- span : DUMMY_SP ,
662- } ;
627+ ] ) ;
663628 assert_eq ! ( Cfg :: parse( & mi) , Ok ( !( word_cfg( "a" ) | ( word_cfg( "b" ) & word_cfg( "c" ) ) ) ) ) ;
664629
665- let mi = MetaItem {
666- ident : Ident :: from_str ( "all" ) ,
667- node : MetaItemKind :: List ( vec ! [
668- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
669- ident: Ident :: from_str( "a" ) ,
670- node: MetaItemKind :: Word ,
671- span: DUMMY_SP ,
672- } ) ) ,
673- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
674- ident: Ident :: from_str( "b" ) ,
675- node: MetaItemKind :: Word ,
676- span: DUMMY_SP ,
677- } ) ) ,
678- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
679- ident: Ident :: from_str( "c" ) ,
680- node: MetaItemKind :: Word ,
681- span: DUMMY_SP ,
682- } ) ) ,
683- ] ) ,
684- span : DUMMY_SP ,
685- } ;
630+ let mi = dummy_meta_item_list ! ( all, [ a, b, c] ) ;
686631 assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) & word_cfg( "c" ) ) ) ;
687632 } )
688633 }
@@ -691,97 +636,36 @@ mod test {
691636 fn test_parse_err ( ) {
692637 with_globals ( || {
693638 let mi = MetaItem {
694- ident : Ident :: from_str ( "foo" ) ,
639+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "foo" ) ) ,
695640 node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Bool ( false ) ) ) ,
696641 span : DUMMY_SP ,
697642 } ;
698643 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
699644
700- let mi = MetaItem {
701- ident : Ident :: from_str ( "not" ) ,
702- node : MetaItemKind :: List ( vec ! [
703- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
704- ident: Ident :: from_str( "a" ) ,
705- node: MetaItemKind :: Word ,
706- span: DUMMY_SP ,
707- } ) ) ,
708- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
709- ident: Ident :: from_str( "b" ) ,
710- node: MetaItemKind :: Word ,
711- span: DUMMY_SP ,
712- } ) ) ,
713- ] ) ,
714- span : DUMMY_SP ,
715- } ;
645+ let mi = dummy_meta_item_list ! ( not, [ a, b] ) ;
716646 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
717647
718- let mi = MetaItem {
719- ident : Ident :: from_str ( "not" ) ,
720- node : MetaItemKind :: List ( vec ! [ ] ) ,
721- span : DUMMY_SP ,
722- } ;
648+ let mi = dummy_meta_item_list ! ( not, [ ] ) ;
723649 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
724650
725- let mi = MetaItem {
726- ident : Ident :: from_str ( "foo" ) ,
727- node : MetaItemKind :: List ( vec ! [
728- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
729- ident: Ident :: from_str( "a" ) ,
730- node: MetaItemKind :: Word ,
731- span: DUMMY_SP ,
732- } ) ) ,
733- ] ) ,
734- span : DUMMY_SP ,
735- } ;
651+ let mi = dummy_meta_item_list ! ( foo, [ ] ) ;
736652 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
737653
738- let mi = MetaItem {
739- ident : Ident :: from_str ( "all" ) ,
740- node : MetaItemKind :: List ( vec ! [
741- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
742- ident: Ident :: from_str( "foo" ) ,
743- node: MetaItemKind :: List ( vec![ ] ) ,
744- span: DUMMY_SP ,
745- } ) ) ,
746- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
747- ident: Ident :: from_str( "b" ) ,
748- node: MetaItemKind :: Word ,
749- span: DUMMY_SP ,
750- } ) ) ,
751- ] ) ,
752- span : DUMMY_SP ,
753- } ;
654+ let mi = dummy_meta_item_list ! ( all, [
655+ dummy_meta_item_list!( foo, [ ] ) ,
656+ dummy_meta_item_word( "b" ) ,
657+ ] ) ;
754658 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
755659
756- let mi = MetaItem {
757- ident : Ident :: from_str ( "any" ) ,
758- node : MetaItemKind :: List ( vec ! [
759- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
760- ident: Ident :: from_str( "a" ) ,
761- node: MetaItemKind :: Word ,
762- span: DUMMY_SP ,
763- } ) ) ,
764- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
765- ident: Ident :: from_str( "foo" ) ,
766- node: MetaItemKind :: List ( vec![ ] ) ,
767- span: DUMMY_SP ,
768- } ) ) ,
769- ] ) ,
770- span : DUMMY_SP ,
771- } ;
660+ let mi = dummy_meta_item_list ! ( any, [
661+ dummy_meta_item_word( "a" ) ,
662+ dummy_meta_item_list!( foo, [ ] ) ,
663+ ] ) ;
772664 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
773665
774- let mi = MetaItem {
775- ident : Ident :: from_str ( "not" ) ,
776- node : MetaItemKind :: List ( vec ! [
777- dummy_spanned( NestedMetaItemKind :: MetaItem ( MetaItem {
778- ident: Ident :: from_str( "foo" ) ,
779- node: MetaItemKind :: List ( vec![ ] ) ,
780- span: DUMMY_SP ,
781- } ) ) ,
782- ] ) ,
783- span : DUMMY_SP ,
784- } ;
666+ let mi = dummy_meta_item_list ! ( not, [
667+ dummy_meta_item_list!( foo, [ ] ) ,
668+ ] ) ;
785669 assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
786670 } )
787671 }
0 commit comments