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