@@ -117,6 +117,92 @@ impl<'a> State<'a> {
117
117
) ) ;
118
118
self . hardbreak ( )
119
119
}
120
+ hir:: Attribute :: Parsed ( AttributeKind :: Deprecation { deprecation, .. } ) => {
121
+ self . word ( "#[deprecated" ) ;
122
+
123
+ // There are three possible forms here:
124
+ // 1. a form with explicit components like
125
+ // `#[deprecated(since = "1.2.3", note = "some note", suggestion = "something")]`
126
+ // where each component may be present or absent.
127
+ // 2. `#[deprecated = "message"]`
128
+ // 3. `#[deprecated]`
129
+ //
130
+ // Let's figure out which we need.
131
+ // If there's a `since` or `suggestion` value, we're definitely in form 1.
132
+ if matches ! (
133
+ deprecation. since,
134
+ rustc_attr_parsing:: DeprecatedSince :: RustcVersion ( ..)
135
+ | rustc_attr_parsing:: DeprecatedSince :: Future
136
+ | rustc_attr_parsing:: DeprecatedSince :: NonStandard ( ..)
137
+ ) || deprecation. suggestion . is_some ( )
138
+ {
139
+ self . word ( "(" ) ;
140
+ let mut use_comma = false ;
141
+
142
+ match & deprecation. since {
143
+ rustc_attr_parsing:: DeprecatedSince :: RustcVersion ( rustc_version) => {
144
+ self . word ( "since = \" " ) ;
145
+ self . word ( format ! (
146
+ "{}.{}.{}" ,
147
+ rustc_version. major, rustc_version. minor, rustc_version. patch
148
+ ) ) ;
149
+ self . word ( "\" " ) ;
150
+ use_comma = true ;
151
+ }
152
+ rustc_attr_parsing:: DeprecatedSince :: Future => {
153
+ self . word ( "since = \" future\" " ) ;
154
+ use_comma = true ;
155
+ }
156
+ rustc_attr_parsing:: DeprecatedSince :: NonStandard ( symbol) => {
157
+ self . word ( "since = \" " ) ;
158
+ self . word ( symbol. to_ident_string ( ) ) ;
159
+ self . word ( "\" " ) ;
160
+ use_comma = true ;
161
+ }
162
+ _ => { }
163
+ }
164
+
165
+ if let Some ( note) = & deprecation. note {
166
+ if use_comma {
167
+ self . word ( ", " ) ;
168
+ }
169
+ self . word ( "note = \" " ) ;
170
+ self . word ( note. to_ident_string ( ) ) ;
171
+ self . word ( "\" " ) ;
172
+ use_comma = true ;
173
+ }
174
+
175
+ if let Some ( suggestion) = & deprecation. suggestion {
176
+ if use_comma {
177
+ self . word ( ", " ) ;
178
+ }
179
+ self . word ( "suggestion = \" " ) ;
180
+ self . word ( suggestion. to_ident_string ( ) ) ;
181
+ self . word ( "\" " ) ;
182
+ }
183
+ } else if let Some ( note) = & deprecation. note {
184
+ // We're in form 2: `#[deprecated = "message"]`.
185
+ self . word ( " = \" " ) ;
186
+ self . word ( note. to_ident_string ( ) ) ;
187
+ self . word ( "\" " ) ;
188
+ } else {
189
+ // We're in form 3: `#[deprecated]`. Nothing to do here.
190
+ }
191
+
192
+ self . word ( "]" ) ;
193
+ }
194
+ hir:: Attribute :: Parsed ( AttributeKind :: Diagnostic ( diagnostic_attribute) ) => {
195
+ // Unfortunately it appears that the contents of the diagnostic attribute
196
+ // are not present here, so we cannot currently include them in the printed output.
197
+ match diagnostic_attribute {
198
+ rustc_attr_parsing:: DiagnosticAttribute :: DoNotRecommend => {
199
+ self . word ( "#[diagnostic::do_not_recommend]" ) ;
200
+ }
201
+ rustc_attr_parsing:: DiagnosticAttribute :: OnUnimplemented => {
202
+ self . word ( "#[diagnostic::on_unimplemented]" ) ;
203
+ }
204
+ }
205
+ }
120
206
hir:: Attribute :: Parsed ( pa) => {
121
207
self . word ( "#[attr=\" " ) ;
122
208
pa. print_attribute ( self ) ;
0 commit comments