@@ -67,7 +67,7 @@ impl Cfg {
67
67
/// If the content is not properly formatted, it will return an error indicating what and where
68
68
/// the error is.
69
69
pub fn parse ( cfg : & MetaItem ) -> Result < Cfg , InvalidCfgError > {
70
- let name = cfg. ident . name ;
70
+ let name = cfg. name ( ) ;
71
71
match cfg. node {
72
72
MetaItemKind :: Word => Ok ( Cfg :: Cfg ( name, None ) ) ,
73
73
MetaItemKind :: NameValue ( ref lit) => match lit. node {
@@ -436,6 +436,42 @@ mod test {
436
436
Cfg :: Cfg ( Symbol :: intern ( name) , Some ( Symbol :: intern ( value) ) )
437
437
}
438
438
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
+
439
475
#[ test]
440
476
fn test_cfg_not ( ) {
441
477
with_globals ( || {
@@ -561,15 +597,11 @@ mod test {
561
597
#[ test]
562
598
fn test_parse_ok ( ) {
563
599
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" ) ;
569
601
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "all" ) ) ) ;
570
602
571
603
let mi = MetaItem {
572
- ident : Ident :: from_str ( "all" ) ,
604
+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "all" ) ) ,
573
605
node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Str (
574
606
Symbol :: intern ( "done" ) ,
575
607
StrStyle :: Cooked ,
@@ -578,111 +610,24 @@ mod test {
578
610
} ;
579
611
assert_eq ! ( Cfg :: parse( & mi) , Ok ( name_value_cfg( "all" , "done" ) ) ) ;
580
612
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] ) ;
597
614
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) ) ) ;
598
615
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] ) ;
615
617
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) | word_cfg( "b" ) ) ) ;
616
618
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] ) ;
628
620
assert_eq ! ( Cfg :: parse( & mi) , Ok ( !word_cfg( "a" ) ) ) ;
629
621
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] ) ,
660
626
] ) ,
661
- span : DUMMY_SP ,
662
- } ;
627
+ ] ) ;
663
628
assert_eq ! ( Cfg :: parse( & mi) , Ok ( !( word_cfg( "a" ) | ( word_cfg( "b" ) & word_cfg( "c" ) ) ) ) ) ;
664
629
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] ) ;
686
631
assert_eq ! ( Cfg :: parse( & mi) , Ok ( word_cfg( "a" ) & word_cfg( "b" ) & word_cfg( "c" ) ) ) ;
687
632
} )
688
633
}
@@ -691,97 +636,36 @@ mod test {
691
636
fn test_parse_err ( ) {
692
637
with_globals ( || {
693
638
let mi = MetaItem {
694
- ident : Ident :: from_str ( "foo" ) ,
639
+ name : Path :: from_ident ( DUMMY_SP , Ident :: from_str ( "foo" ) ) ,
695
640
node : MetaItemKind :: NameValue ( dummy_spanned ( LitKind :: Bool ( false ) ) ) ,
696
641
span : DUMMY_SP ,
697
642
} ;
698
643
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
699
644
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] ) ;
716
646
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
717
647
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, [ ] ) ;
723
649
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
724
650
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, [ ] ) ;
736
652
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
737
653
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
+ ] ) ;
754
658
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
755
659
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
+ ] ) ;
772
664
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
773
665
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
+ ] ) ;
785
669
assert ! ( Cfg :: parse( & mi) . is_err( ) ) ;
786
670
} )
787
671
}
0 commit comments