@@ -596,81 +596,86 @@ fn find_deprecation_generic<'a, I>(sess: &ParseSess,
596596 let  diagnostic = & sess. span_diagnostic ; 
597597
598598 ' outer:  for  attr in  attrs_iter { 
599-  if  attr. path  !=  "deprecated"  { 
600-  continue 
599+  if  ! attr. check_name ( "deprecated" )  { 
600+  continue ; 
601601 } 
602602
603-  mark_used ( attr) ; 
604- 
605603 if  depr. is_some ( )  { 
606604 span_err ! ( diagnostic,  item_sp,  E0550 ,  "multiple deprecated attributes" ) ; 
607605 break 
608606 } 
609607
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 
632621 } 
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+  } 
633639
634-  false 
635-  } 
636-  } ; 
640+    false 
641+    } 
642+    } ; 
637643
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+  } 
653660 } 
654661 } 
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+  } 
666673 } 
667674 } 
668-  } 
669675
670-  Some ( Deprecation  { since :  since,  note :  note} ) 
671-  }  else  { 
672-  Some ( Deprecation { since :  None ,  note :  None } ) 
673-  } 
676+  Some ( Deprecation  {  since,  note } ) 
677+  } 
678+  } ; 
674679 } 
675680
676681 depr
0 commit comments