@@ -592,81 +592,86 @@ fn find_deprecation_generic<'a, I>(sess: &ParseSess,
592
592
let diagnostic = & sess. span_diagnostic ;
593
593
594
594
' outer: for attr in attrs_iter {
595
- if attr. path != "deprecated" {
596
- continue
595
+ if ! attr. check_name ( "deprecated" ) {
596
+ continue ;
597
597
}
598
598
599
- mark_used ( attr) ;
600
-
601
599
if depr. is_some ( ) {
602
600
span_err ! ( diagnostic, item_sp, E0550 , "multiple deprecated attributes" ) ;
603
601
break
604
602
}
605
603
606
- depr = if let Some ( metas) = attr. meta_item_list ( ) {
607
- let get = |meta : & MetaItem , item : & mut Option < Symbol > | {
608
- if item. is_some ( ) {
609
- handle_errors ( sess, meta. span , AttrError :: MultipleItem ( meta. name ( ) ) ) ;
610
- return false
611
- }
612
- if let Some ( v) = meta. value_str ( ) {
613
- * item = Some ( v) ;
614
- true
615
- } else {
616
- if let Some ( lit) = meta. name_value_literal ( ) {
617
- handle_errors (
618
- sess,
619
- lit. span ,
620
- AttrError :: UnsupportedLiteral (
621
- "literal in `deprecated` \
622
- value must be a string",
623
- lit. node . is_bytestr ( )
624
- ) ,
625
- ) ;
626
- } else {
627
- span_err ! ( diagnostic, meta. span, E0551 , "incorrect meta item" ) ;
604
+ let meta = attr. meta ( ) . unwrap ( ) ;
605
+ depr = match & meta. node {
606
+ MetaItemKind :: Word => Some ( Deprecation { since : None , note : None } ) ,
607
+ MetaItemKind :: NameValue ( ..) => {
608
+ meta. value_str ( ) . map ( |note| {
609
+ Deprecation { since : None , note : Some ( note) }
610
+ } )
611
+ }
612
+ MetaItemKind :: List ( list) => {
613
+ let get = |meta : & MetaItem , item : & mut Option < Symbol > | {
614
+ if item. is_some ( ) {
615
+ handle_errors ( sess, meta. span , AttrError :: MultipleItem ( meta. name ( ) ) ) ;
616
+ return false
628
617
}
618
+ if let Some ( v) = meta. value_str ( ) {
619
+ * item = Some ( v) ;
620
+ true
621
+ } else {
622
+ if let Some ( lit) = meta. name_value_literal ( ) {
623
+ handle_errors (
624
+ sess,
625
+ lit. span ,
626
+ AttrError :: UnsupportedLiteral (
627
+ "literal in `deprecated` \
628
+ value must be a string",
629
+ lit. node . is_bytestr ( )
630
+ ) ,
631
+ ) ;
632
+ } else {
633
+ span_err ! ( diagnostic, meta. span, E0551 , "incorrect meta item" ) ;
634
+ }
629
635
630
- false
631
- }
632
- } ;
636
+ false
637
+ }
638
+ } ;
633
639
634
- let mut since = None ;
635
- let mut note = None ;
636
- for meta in metas {
637
- match & meta. node {
638
- NestedMetaItemKind :: MetaItem ( mi) => {
639
- match & * mi. name ( ) . as_str ( ) {
640
- "since" => if !get ( mi, & mut since) { continue ' outer } ,
641
- "note" => if !get ( mi, & mut note) { continue ' outer } ,
642
- _ => {
643
- handle_errors (
644
- sess,
645
- meta. span ,
646
- AttrError :: UnknownMetaItem ( mi. name ( ) , & [ "since" , "note" ] ) ,
647
- ) ;
648
- continue ' outer
640
+ let mut since = None ;
641
+ let mut note = None ;
642
+ for meta in list {
643
+ match & meta. node {
644
+ NestedMetaItemKind :: MetaItem ( mi) => {
645
+ match & * mi. name ( ) . as_str ( ) {
646
+ "since" => if !get ( mi, & mut since) { continue ' outer } ,
647
+ "note" => if !get ( mi, & mut note) { continue ' outer } ,
648
+ _ => {
649
+ handle_errors (
650
+ sess,
651
+ meta. span ,
652
+ AttrError :: UnknownMetaItem ( mi. name ( ) , & [ "since" , "note" ] ) ,
653
+ ) ;
654
+ continue ' outer
655
+ }
649
656
}
650
657
}
651
- }
652
- NestedMetaItemKind :: Literal ( lit ) => {
653
- handle_errors (
654
- sess ,
655
- lit . span ,
656
- AttrError :: UnsupportedLiteral (
657
- "item in `deprecated` must be a key/value pair" ,
658
- false ,
659
- ) ,
660
- ) ;
661
- continue ' outer
658
+ NestedMetaItemKind :: Literal ( lit ) => {
659
+ handle_errors (
660
+ sess ,
661
+ lit . span ,
662
+ AttrError :: UnsupportedLiteral (
663
+ "item in `deprecated` must be a key/value pair" ,
664
+ false ,
665
+ ) ,
666
+ ) ;
667
+ continue ' outer
668
+ }
662
669
}
663
670
}
664
- }
665
671
666
- Some ( Deprecation { since : since, note : note} )
667
- } else {
668
- Some ( Deprecation { since : None , note : None } )
669
- }
672
+ Some ( Deprecation { since, note } )
673
+ }
674
+ } ;
670
675
}
671
676
672
677
depr
0 commit comments