@@ -7,7 +7,6 @@ use super::{AttributeOrder, OnDuplicate, SingleAttributeParser};
7
7
use crate :: context:: { AcceptContext , Stage } ;
8
8
use crate :: parser:: ArgParser ;
9
9
use crate :: session_diagnostics;
10
- use crate :: session_diagnostics:: UnsupportedLiteralReason ;
11
10
12
11
pub ( crate ) struct DeprecationParser ;
13
12
@@ -26,13 +25,7 @@ fn get<S: Stage>(
26
25
if let Some ( value_str) = v. value_as_str ( ) {
27
26
Some ( value_str)
28
27
} 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 ( ) ) ) ;
36
29
None
37
30
}
38
31
} else {
@@ -60,57 +53,59 @@ impl<S: Stage> SingleAttributeParser<S> for DeprecationParser {
60
53
61
54
let is_rustc = features. staged_api ( ) ;
62
55
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
+ } ;
79
66
80
- let ident_name = param. path ( ) . word_sym ( ) ;
67
+ let ident_name = param. path ( ) . word_sym ( ) ;
81
68
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) ?) ;
96
75
}
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
+ }
97
84
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 = Some ( get ( cx, name, param. span ( ) , param. args ( ) , & suggestion) ?) ;
86
+ }
87
+ _ => {
88
+ cx. unknown_key (
89
+ param. span ( ) ,
90
+ param. path ( ) . to_string ( ) ,
91
+ if features. deprecated_suggestion ( ) {
92
+ & [ "since" , "note" , "suggestion" ]
93
+ } else {
94
+ & [ "since" , "note" ]
95
+ } ,
96
+ ) ;
97
+ return None ;
98
+ }
111
99
}
112
100
}
113
101
}
102
+ ArgParser :: NameValue ( v) => {
103
+ let Some ( value) = v. value_as_str ( ) else {
104
+ cx. expected_string_literal ( v. value_span , Some ( v. value_as_lit ( ) ) ) ;
105
+ return None ;
106
+ } ;
107
+ note = Some ( value) ;
108
+ }
114
109
}
115
110
116
111
let since = if let Some ( since) = since {
0 commit comments