@@ -95,19 +95,19 @@ represent optional `#[note]`/`#[help]` subdiagnostics.
95
95
96
96
Suggestions can be emitted using one of four field attributes:
97
97
98
- - ` #[suggestion(message = "..." , code = "...", applicability = "...")] `
99
- - ` #[suggestion_hidden(message = "..." , code = "...", applicability = "...")] `
100
- - ` #[suggestion_short(message = "..." , code = "...", applicability = "...")] `
101
- - ` #[suggestion_verbose(message = "..." , code = "...", applicability = "...")] `
98
+ - ` #[suggestion(slug , code = "...", applicability = "...")] `
99
+ - ` #[suggestion_hidden(slug , code = "...", applicability = "...")] `
100
+ - ` #[suggestion_short(slug , code = "...", applicability = "...")] `
101
+ - ` #[suggestion_verbose(slug , code = "...", applicability = "...")] `
102
102
103
103
Suggestions must be applied on either a ` Span ` field or a `(Span,
104
- MachineApplicability)` field. Similarly to other field attributes, ` message`
105
- specifies the Fluent attribute with the message and defaults to ` .suggestion ` .
106
- ` code ` specifies the code that should be suggested as a replacement and is a
107
- format string (e.g. ` {field_name} ` would be replaced by the value of the
108
- ` field_name ` field of the struct), not a Fluent identifier. ` applicability ` can
109
- be used to specify the applicability in the attribute, it cannot be used when
110
- the field's type contains an ` Applicability ` .
104
+ MachineApplicability)` field. Similarly to other field attributes, the slug
105
+ specifies the Fluent attribute with the message and defaults to the equivalent
106
+ of ` .suggestion ` . ` code ` specifies the code that should be suggested as a
107
+ replacement and is a format string (e.g. ` {field_name} ` would be replaced by
108
+ the value of the ` field_name ` field of the struct), not a Fluent identifier.
109
+ ` applicability ` can be used to specify the applicability in the attribute, it
110
+ cannot be used when the field's type contains an ` Applicability ` .
111
111
112
112
In the end, the ` SessionDiagnostic ` derive will generate an implementation of
113
113
` SessionDiagnostic ` that looks like the following:
@@ -143,12 +143,16 @@ tcx.sess.emit_err(FieldAlreadyDeclared {
143
143
```
144
144
145
145
### Reference
146
- ` #[derive(SessionDiagnostic)] ` supports the following attributes:
146
+ ` #[derive(SessionDiagnostic)] ` and ` #[derive(LintDiagnostic)] ` support the
147
+ following attributes:
147
148
148
- - ` #[error(slug, code = "...")] ` or ` #[warning(slug, code = "...")] `
149
+ - ` #[error(slug, code = "...")] ` , ` #[warning(slug, code = "...")] ` ,
150
+ ` #[fatal(slug, code = "...")] ` or ` #[lint(slug, code = "...")] `
149
151
- _ Applied to struct._
150
152
- _ Mandatory_
151
- - Defines the struct to be representing an error or a warning.
153
+ - Defines the struct to be representing an error, fatal error, a warning or a
154
+ lint. Errors, fatal errors and warnings only supported by
155
+ ` SessionDiagnostic ` , and lints by ` LintDiagnostic ` .
152
156
- Slug (_ Mandatory_ )
153
157
- Uniquely identifies the diagnostic and corresponds to its Fluent message,
154
158
mandatory.
@@ -161,34 +165,48 @@ tcx.sess.emit_err(FieldAlreadyDeclared {
161
165
- See [ translation documentation] ( ./translation.md ) .
162
166
- ` code = "..." ` (_ Optional_ )
163
167
- Specifies the error code.
164
- - ` #[note] ` or ` #[note(... )] ` (_ Optional_ )
168
+ - ` #[note] ` or ` #[note(slug )] ` (_ Optional_ )
165
169
- _ Applied to struct or ` Span ` /` () ` fields._
166
170
- Adds a note subdiagnostic.
167
- - Value is the Fluent attribute (relative to the Fluent message specified by
168
- ` slug ` ) for the note's message
169
- - Defaults to ` note ` .
171
+ - Value is a path to an item in ` rustc_errors::fluent ` for the note's
172
+ message.
173
+ - Defaults to equivalent of ` . note` .
170
174
- If applied to a ` Span ` field, creates a spanned note.
171
- - ` #[help] ` or ` #[help(... )] ` (_ Optional_ )
175
+ - ` #[help] ` or ` #[help(slug )] ` (_ Optional_ )
172
176
- _ Applied to struct or ` Span ` /` () ` fields._
173
177
- Adds a help subdiagnostic.
174
- - Value is the Fluent attribute (relative to the Fluent message specified by
175
- ` slug ` ) for the help's message.
176
- - Defaults to ` help ` .
178
+ - Value is a path to an item in ` rustc_errors::fluent ` for the note's
179
+ message.
180
+ - Defaults to equivalent of ` . help` .
177
181
- If applied to a ` Span ` field, creates a spanned help.
178
- - ` #[label] ` or ` #[label(... )] ` (_ Optional_ )
182
+ - ` #[label] ` or ` #[label(slug )] ` (_ Optional_ )
179
183
- _ Applied to ` Span ` fields._
180
184
- Adds a label subdiagnostic.
181
- - Value is the Fluent attribute (relative to the Fluent message specified by
182
- ` slug ` ) for the label's message.
183
- - Defaults to ` label ` .
184
- - ` #[suggestion{,_hidden,_short,_verbose}(message = "...", code = "...", applicability = "...")] `
185
+ - Value is a path to an item in ` rustc_errors::fluent ` for the note's
186
+ message.
187
+ - Defaults to equivalent of ` .label ` .
188
+ - ` #[warn_] ` or ` #[warn_(slug)] ` (_ Optional_ )
189
+ - _ Applied to ` Span ` fields._
190
+ - Adds a warning subdiagnostic.
191
+ - Value is a path to an item in ` rustc_errors::fluent ` for the note's
192
+ message.
193
+ - Defaults to equivalent of ` .warn ` .
194
+ - ` #[suggestion{,_hidden,_short,_verbose}(slug, code = "...", applicability = "...")] `
185
195
(_ Optional_ )
186
196
- _ Applied to ` (Span, MachineApplicability) ` or ` Span ` fields._
187
197
- Adds a suggestion subdiagnostic.
188
- - ` message = "..." ` (_ Mandatory_ )
189
- - Value is the Fluent attribute (relative to the Fluent message specified
190
- by ` slug ` ) for the suggestion's message.
191
- - Defaults to ` suggestion ` .
198
+ - Slug (_ Mandatory_ )
199
+ - A path to an item in ` rustc_errors::fluent ` . Always in a module starting
200
+ with a Fluent resource name (which is typically the name of the crate
201
+ that the diagnostic is from), e.g.
202
+ ` rustc_errors::fluent::typeck::field_already_declared `
203
+ (` rustc_errors::fluent ` is implicit in the attribute, so just
204
+ ` typeck::field_already_declared ` ). Fluent attributes for all messages
205
+ exist as top-level items in that module (so ` typeck_message.attr ` is just
206
+ ` typeck::attr ` ).
207
+ - See [ translation documentation] ( ./translation.md ) .
208
+ - Defaults to ` rustc_errors::fluent::_subdiag::suggestion ` (or
209
+ - ` .suggestion ` in Fluent).
192
210
- ` code = "..." ` (_ Mandatory_ )
193
211
- Value is a format string indicating the code to be suggested as a
194
212
replacement.
@@ -273,16 +291,17 @@ Like `SessionDiagnostic`, `SessionSubdiagnostic` supports `Option<T>` and
273
291
274
292
Suggestions can be emitted using one of four attributes on the type/variant:
275
293
276
- - ` #[suggestion(message = " ..." , code = "...", applicability = "...")] `
277
- - ` #[suggestion_hidden(message = " ..." , code = "...", applicability = "...")] `
278
- - ` #[suggestion_short(message = " ..." , code = "...", applicability = "...")] `
279
- - ` #[suggestion_verbose(message = " ..." , code = "...", applicability = "...")] `
294
+ - ` #[suggestion(..., code = "...", applicability = "...")] `
295
+ - ` #[suggestion_hidden(..., code = "...", applicability = "...")] `
296
+ - ` #[suggestion_short(..., code = "...", applicability = "...")] `
297
+ - ` #[suggestion_verbose(..., code = "...", applicability = "...")] `
280
298
281
299
Suggestions require ` #[primary_span] ` be set on a field and can have the
282
300
following sub-attributes:
283
301
284
- - ` message ` specifies the Fluent attribute with the message and defaults to
285
- ` .suggestion ` .
302
+ - The first positional argument specifies the path to a item in
303
+ ` rustc_errors::fluent ` corresponding to the Fluent attribute with the message
304
+ and defaults to the equivalent of ` .suggestion ` .
286
305
- ` code ` specifies the code that should be suggested as a replacement and is a
287
306
format string (e.g. ` {field_name} ` would be replaced by the value of the
288
307
` field_name ` field of the struct), not a Fluent identifier.
@@ -335,14 +354,22 @@ diagnostic struct.
335
354
(` rustc_errors::fluent ` is implicit in the attribute, so just
336
355
` typeck::field_already_declared ` ).
337
356
- See [ translation documentation] ( ./translation.md ) .
338
- - ` #[suggestion{,_hidden,_short,_verbose}(message = "..." , code = "...", applicability = "...")] `
357
+ - ` #[suggestion{,_hidden,_short,_verbose}(slug , code = "...", applicability = "...")] `
339
358
- _ Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes._
340
359
- _ Mandatory_
341
360
- Defines the type to be representing a suggestion.
342
- - ` message = "..." ` (_ Mandatory_ )
343
- - Value is the Fluent attribute (relative to the Fluent message specified
344
- by ` slug ` ) for the suggestion's message.
345
- - Defaults to ` suggestion ` .
361
+ - Slug (_ Mandatory_ )
362
+ - A path to an item in ` rustc_errors::fluent ` . Always in a module starting
363
+ with a Fluent resource name (which is typically the name of the crate
364
+ that the diagnostic is from), e.g.
365
+ ` rustc_errors::fluent::typeck::field_already_declared `
366
+ (` rustc_errors::fluent ` is implicit in the attribute, so just
367
+ ` typeck::field_already_declared ` ). Fluent attributes for all messages
368
+ exist as top-level items in that module (so ` typeck_message.attr ` is just
369
+ ` typeck::attr ` ).
370
+ - See [ translation documentation] ( ./translation.md ) .
371
+ - Defaults to ` rustc_errors::fluent::_subdiag::suggestion ` (or
372
+ - ` .suggestion ` in Fluent).
346
373
- ` code = "..." ` (_ Mandatory_ )
347
374
- Value is a format string indicating the code to be suggested as a
348
375
replacement.
0 commit comments