@@ -7,7 +7,6 @@ use super::{AttributeOrder, OnDuplicate, SingleAttributeParser};
77use  crate :: context:: { AcceptContext ,  Stage } ; 
88use  crate :: parser:: ArgParser ; 
99use  crate :: session_diagnostics; 
10- use  crate :: session_diagnostics:: UnsupportedLiteralReason ; 
1110
1211pub ( crate )  struct  DeprecationParser ; 
1312
@@ -26,13 +25,7 @@ fn get<S: Stage>(
2625        if  let  Some ( value_str)  = v. value_as_str ( )  { 
2726            Some ( value_str) 
2827        }  else  { 
29-             let  lit = v. value_as_lit ( ) ; 
30-             cx. emit_err ( session_diagnostics:: UnsupportedLiteral  { 
31-                 span :  v. value_span , 
32-                 reason :  UnsupportedLiteralReason :: DeprecatedString , 
33-                 is_bytestr :  lit. kind . is_bytestr ( ) , 
34-                 start_point_span :  cx. sess ( ) . source_map ( ) . start_point ( lit. span ) , 
35-             } ) ; 
28+             cx. expected_string_literal ( v. value_span ,  Some ( & v. value_as_lit ( ) ) ) ; 
3629            None 
3730        } 
3831    }  else  { 
@@ -60,57 +53,60 @@ impl<S: Stage> SingleAttributeParser<S> for DeprecationParser {
6053
6154        let  is_rustc = features. staged_api ( ) ; 
6255
63-         if  let  Some ( value)  = args. name_value ( ) 
64-             && let  Some ( value_str)  = value. value_as_str ( ) 
65-         { 
66-             note = Some ( value_str) 
67-         }  else  if  let  Some ( list)  = args. list ( )  { 
68-             for  param in  list. mixed ( )  { 
69-                 let  param_span = param. span ( ) ; 
70-                 let  Some ( param)  = param. meta_item ( )  else  { 
71-                     cx. emit_err ( session_diagnostics:: UnsupportedLiteral  { 
72-                         span :  param_span, 
73-                         reason :  UnsupportedLiteralReason :: DeprecatedKvPair , 
74-                         is_bytestr :  false , 
75-                         start_point_span :  cx. sess ( ) . source_map ( ) . start_point ( param_span) , 
76-                     } ) ; 
77-                     return  None ; 
78-                 } ; 
56+         match  args { 
57+             ArgParser :: NoArgs  => { 
58+                 // ok 
59+             } 
60+             ArgParser :: List ( list)  => { 
61+                 for  param in  list. mixed ( )  { 
62+                     let  Some ( param)  = param. meta_item ( )  else  { 
63+                         cx. unexpected_literal ( param. span ( ) ) ; 
64+                         return  None ; 
65+                     } ; 
7966
80-                 let  ident_name = param. path ( ) . word_sym ( ) ; 
67+                      let  ident_name = param. path ( ) . word_sym ( ) ; 
8168
82-                 match  ident_name { 
83-                     Some ( name @ sym:: since)  => { 
84-                         since = Some ( get ( cx,  name,  param_span,  param. args ( ) ,  & since) ?) ; 
85-                     } 
86-                     Some ( name @ sym:: note)  => { 
87-                         note = Some ( get ( cx,  name,  param_span,  param. args ( ) ,  & note) ?) ; 
88-                     } 
89-                     Some ( name @ sym:: suggestion)  => { 
90-                         if  !features. deprecated_suggestion ( )  { 
91-                             cx. emit_err ( session_diagnostics:: DeprecatedItemSuggestion  { 
92-                                 span :  param_span, 
93-                                 is_nightly :  cx. sess ( ) . is_nightly_build ( ) , 
94-                                 details :  ( ) , 
95-                             } ) ; 
69+                     match  ident_name { 
70+                         Some ( name @ sym:: since)  => { 
71+                             since = Some ( get ( cx,  name,  param. span ( ) ,  param. args ( ) ,  & since) ?) ; 
72+                         } 
73+                         Some ( name @ sym:: note)  => { 
74+                             note = Some ( get ( cx,  name,  param. span ( ) ,  param. args ( ) ,  & note) ?) ; 
9675                        } 
76+                         Some ( name @ sym:: suggestion)  => { 
77+                             if  !features. deprecated_suggestion ( )  { 
78+                                 cx. emit_err ( session_diagnostics:: DeprecatedItemSuggestion  { 
79+                                     span :  param. span ( ) , 
80+                                     is_nightly :  cx. sess ( ) . is_nightly_build ( ) , 
81+                                     details :  ( ) , 
82+                                 } ) ; 
83+                             } 
9784
98-                         suggestion = Some ( get ( cx,  name,  param_span,  param. args ( ) ,  & suggestion) ?) ; 
99-                     } 
100-                     _ => { 
101-                         cx. unknown_key ( 
102-                             param_span, 
103-                             param. path ( ) . to_string ( ) , 
104-                             if  features. deprecated_suggestion ( )  { 
105-                                 & [ "since" ,  "note" ,  "suggestion" ] 
106-                             }  else  { 
107-                                 & [ "since" ,  "note" ] 
108-                             } , 
109-                         ) ; 
110-                         return  None ; 
85+                             suggestion =
86+                                 Some ( get ( cx,  name,  param. span ( ) ,  param. args ( ) ,  & suggestion) ?) ; 
87+                         } 
88+                         _ => { 
89+                             cx. unknown_key ( 
90+                                 param. span ( ) , 
91+                                 param. path ( ) . to_string ( ) , 
92+                                 if  features. deprecated_suggestion ( )  { 
93+                                     & [ "since" ,  "note" ,  "suggestion" ] 
94+                                 }  else  { 
95+                                     & [ "since" ,  "note" ] 
96+                                 } , 
97+                             ) ; 
98+                             return  None ; 
99+                         } 
111100                    } 
112101                } 
113102            } 
103+             ArgParser :: NameValue ( v)  => { 
104+                 let  Some ( value)  = v. value_as_str ( )  else  { 
105+                     cx. expected_string_literal ( v. value_span ,  Some ( v. value_as_lit ( ) ) ) ; 
106+                     return  None ; 
107+                 } ; 
108+                 note = Some ( value) ; 
109+             } 
114110        } 
115111
116112        let  since = if  let  Some ( since)  = since { 
0 commit comments