1use std::borrow::Cow;
2
3use rustc_ast::ast;
4use rustc_errors::codes::*;
5use rustc_macros::{Diagnostic, Subdiagnostic};
6use rustc_session::Limit;
7use rustc_span::{Ident, MacroRulesNormalizedIdent, Span, Symbol};
8
9#[derive(Diagnostic)]
10#[diag(expand_expr_repeat_no_syntax_vars)]
11pub(crate) struct NoSyntaxVarsExprRepeat {
12 #[primary_span]
13 pub span: Span,
14}
15
16#[derive(Diagnostic)]
17#[diag(expand_must_repeat_once)]
18pub(crate) struct MustRepeatOnce {
19 #[primary_span]
20 pub span: Span,
21}
22
23#[derive(Diagnostic)]
24#[diag(expand_count_repetition_misplaced)]
25pub(crate) struct CountRepetitionMisplaced {
26 #[primary_span]
27 pub span: Span,
28}
29
30#[derive(Diagnostic)]
31#[diag(expand_meta_var_expr_unrecognized_var)]
32pub(crate) struct MetaVarExprUnrecognizedVar {
33 #[primary_span]
34 pub span: Span,
35 pub key: MacroRulesNormalizedIdent,
36}
37
38#[derive(Diagnostic)]
39#[diag(expand_var_still_repeating)]
40pub(crate) struct VarStillRepeating {
41 #[primary_span]
42 pub span: Span,
43 pub ident: MacroRulesNormalizedIdent,
44}
45
46#[derive(Diagnostic)]
47#[diag(expand_meta_var_dif_seq_matchers)]
48pub(crate) struct MetaVarsDifSeqMatchers {
49 #[primary_span]
50 pub span: Span,
51 pub msg: String,
52}
53
54#[derive(Diagnostic)]
55#[diag(expand_resolve_relative_path)]
56pub(crate) struct ResolveRelativePath {
57 #[primary_span]
58 pub span: Span,
59 pub path: String,
60}
61
62#[derive(Diagnostic)]
63#[diag(expand_collapse_debuginfo_illegal)]
64pub(crate) struct CollapseMacroDebuginfoIllegal {
65 #[primary_span]
66 pub span: Span,
67}
68
69#[derive(Diagnostic)]
70#[diag(expand_macro_const_stability)]
71pub(crate) struct MacroConstStability {
72 #[primary_span]
73 #[label]
74 pub span: Span,
75 #[label(expand_label2)]
76 pub head_span: Span,
77}
78
79#[derive(Diagnostic)]
80#[diag(expand_macro_body_stability)]
81pub(crate) struct MacroBodyStability {
82 #[primary_span]
83 #[label]
84 pub span: Span,
85 #[label(expand_label2)]
86 pub head_span: Span,
87}
88
89#[derive(Diagnostic)]
90#[diag(expand_attr_no_arguments)]
91pub(crate) struct AttrNoArguments {
92 #[primary_span]
93 pub span: Span,
94}
95
96#[derive(Diagnostic)]
97#[diag(expand_not_a_meta_item)]
98pub(crate) struct NotAMetaItem {
99 #[primary_span]
100 pub span: Span,
101}
102
103#[derive(Diagnostic)]
104#[diag(expand_only_one_word)]
105pub(crate) struct OnlyOneWord {
106 #[primary_span]
107 pub span: Span,
108}
109
110#[derive(Diagnostic)]
111#[diag(expand_cannot_be_name_of_macro)]
112pub(crate) struct CannotBeNameOfMacro<'a> {
113 #[primary_span]
114 pub span: Span,
115 pub trait_ident: Ident,
116 pub macro_type: &'a str,
117}
118
119#[derive(Diagnostic)]
120#[diag(expand_arg_not_attributes)]
121pub(crate) struct ArgumentNotAttributes {
122 #[primary_span]
123 pub span: Span,
124}
125
126#[derive(Diagnostic)]
127#[diag(expand_attributes_wrong_form)]
128pub(crate) struct AttributesWrongForm {
129 #[primary_span]
130 pub span: Span,
131}
132
133#[derive(Diagnostic)]
134#[diag(expand_attribute_meta_item)]
135pub(crate) struct AttributeMetaItem {
136 #[primary_span]
137 pub span: Span,
138}
139
140#[derive(Diagnostic)]
141#[diag(expand_attribute_single_word)]
142pub(crate) struct AttributeSingleWord {
143 #[primary_span]
144 pub span: Span,
145}
146
147#[derive(Diagnostic)]
148#[diag(expand_helper_attribute_name_invalid)]
149pub(crate) struct HelperAttributeNameInvalid {
150 #[primary_span]
151 pub span: Span,
152 pub name: Ident,
153}
154
155#[derive(Diagnostic)]
156#[diag(expand_feature_removed, code = E0557)]
157#[note]
158pub(crate) struct FeatureRemoved<'a> {
159 #[primary_span]
160 #[label]
161 pub span: Span,
162 #[subdiagnostic]
163 pub reason: Option<FeatureRemovedReason<'a>>,
164 pub removed_rustc_version: &'a str,
165 pub pull_note: String,
166}
167
168#[derive(Subdiagnostic)]
169#[note(expand_reason)]
170pub(crate) struct FeatureRemovedReason<'a> {
171 pub reason: &'a str,
172}
173
174#[derive(Diagnostic)]
175#[diag(expand_feature_not_allowed, code = E0725)]
176pub(crate) struct FeatureNotAllowed {
177 #[primary_span]
178 pub span: Span,
179 pub name: Symbol,
180}
181
182#[derive(Diagnostic)]
183#[diag(expand_recursion_limit_reached)]
184#[help]
185pub(crate) struct RecursionLimitReached {
186 #[primary_span]
187 pub span: Span,
188 pub descr: String,
189 pub suggested_limit: Limit,
190 pub crate_name: Symbol,
191}
192
193#[derive(Diagnostic)]
194#[diag(expand_malformed_feature_attribute, code = E0556)]
195pub(crate) struct MalformedFeatureAttribute {
196 #[primary_span]
197 pub span: Span,
198 #[subdiagnostic]
199 pub help: MalformedFeatureAttributeHelp,
200}
201
202#[derive(Subdiagnostic)]
203pub(crate) enum MalformedFeatureAttributeHelp {
204 #[label(expand_expected)]
205 Label {
206 #[primary_span]
207 span: Span,
208 },
209 #[suggestion(expand_expected, code = "{suggestion}", applicability = "maybe-incorrect")]
210 Suggestion {
211 #[primary_span]
212 span: Span,
213 suggestion: Symbol,
214 },
215}
216
217#[derive(Diagnostic)]
218#[diag(expand_remove_expr_not_supported)]
219pub(crate) struct RemoveExprNotSupported {
220 #[primary_span]
221 pub span: Span,
222}
223
224#[derive(Diagnostic)]
225pub(crate) enum InvalidCfg {
226 #[diag(expand_invalid_cfg_no_parens)]
227 NotFollowedByParens {
228 #[primary_span]
229 #[suggestion(
230 expand_invalid_cfg_expected_syntax,
231 code = "cfg(/* predicate */)",
232 applicability = "has-placeholders"
233 )]
234 span: Span,
235 },
236 #[diag(expand_invalid_cfg_no_predicate)]
237 NoPredicate {
238 #[primary_span]
239 #[suggestion(
240 expand_invalid_cfg_expected_syntax,
241 code = "cfg(/* predicate */)",
242 applicability = "has-placeholders"
243 )]
244 span: Span,
245 },
246 #[diag(expand_invalid_cfg_multiple_predicates)]
247 MultiplePredicates {
248 #[primary_span]
249 span: Span,
250 },
251 #[diag(expand_invalid_cfg_predicate_literal)]
252 PredicateLiteral {
253 #[primary_span]
254 span: Span,
255 },
256}
257
258#[derive(Diagnostic)]
259#[diag(expand_wrong_fragment_kind)]
260pub(crate) struct WrongFragmentKind<'a> {
261 #[primary_span]
262 pub span: Span,
263 pub kind: &'a str,
264 pub name: &'a ast::Path,
265}
266
267#[derive(Diagnostic)]
268#[diag(expand_unsupported_key_value)]
269pub(crate) struct UnsupportedKeyValue {
270 #[primary_span]
271 pub span: Span,
272}
273
274#[derive(Diagnostic)]
275#[diag(expand_incomplete_parse)]
276#[note]
277pub(crate) struct IncompleteParse<'a> {
278 #[primary_span]
279 pub span: Span,
280 pub descr: String,
281 #[label]
282 pub label_span: Span,
283 pub macro_path: &'a ast::Path,
284 pub kind_name: &'a str,
285 #[note(expand_macro_expands_to_match_arm)]
286 pub expands_to_match_arm: bool,
287
288 #[suggestion(
289 expand_suggestion_add_semi,
290 style = "verbose",
291 code = ";",
292 applicability = "maybe-incorrect"
293 )]
294 pub add_semicolon: Option<Span>,
295}
296
297#[derive(Diagnostic)]
298#[diag(expand_remove_node_not_supported)]
299pub(crate) struct RemoveNodeNotSupported {
300 #[primary_span]
301 pub span: Span,
302 pub descr: &'static str,
303}
304
305#[derive(Diagnostic)]
306#[diag(expand_module_circular)]
307pub(crate) struct ModuleCircular {
308 #[primary_span]
309 pub span: Span,
310 pub modules: String,
311}
312
313#[derive(Diagnostic)]
314#[diag(expand_module_in_block)]
315pub(crate) struct ModuleInBlock {
316 #[primary_span]
317 pub span: Span,
318 #[subdiagnostic]
319 pub name: Option<ModuleInBlockName>,
320}
321
322#[derive(Subdiagnostic)]
323#[note(expand_note)]
324pub(crate) struct ModuleInBlockName {
325 #[primary_span]
326 pub span: Span,
327 pub name: Ident,
328}
329
330#[derive(Diagnostic)]
331#[diag(expand_module_file_not_found, code = E0583)]
332#[help]
333#[note]
334pub(crate) struct ModuleFileNotFound {
335 #[primary_span]
336 pub span: Span,
337 pub name: Ident,
338 pub default_path: String,
339 pub secondary_path: String,
340}
341
342#[derive(Diagnostic)]
343#[diag(expand_module_multiple_candidates, code = E0761)]
344#[help]
345pub(crate) struct ModuleMultipleCandidates {
346 #[primary_span]
347 pub span: Span,
348 pub name: Ident,
349 pub default_path: String,
350 pub secondary_path: String,
351}
352
353#[derive(Diagnostic)]
354#[diag(expand_trace_macro)]
355pub(crate) struct TraceMacro {
356 #[primary_span]
357 pub span: Span,
358}
359
360#[derive(Diagnostic)]
361#[diag(expand_proc_macro_panicked)]
362pub(crate) struct ProcMacroPanicked {
363 #[primary_span]
364 pub span: Span,
365 #[subdiagnostic]
366 pub message: Option<ProcMacroPanickedHelp>,
367}
368
369#[derive(Subdiagnostic)]
370#[help(expand_help)]
371pub(crate) struct ProcMacroPanickedHelp {
372 pub message: String,
373}
374
375#[derive(Diagnostic)]
376#[diag(expand_proc_macro_derive_panicked)]
377pub(crate) struct ProcMacroDerivePanicked {
378 #[primary_span]
379 pub span: Span,
380 #[subdiagnostic]
381 pub message: Option<ProcMacroDerivePanickedHelp>,
382}
383
384#[derive(Subdiagnostic)]
385#[help(expand_help)]
386pub(crate) struct ProcMacroDerivePanickedHelp {
387 pub message: String,
388}
389
390#[derive(Diagnostic)]
391#[diag(expand_custom_attribute_panicked)]
392pub(crate) struct CustomAttributePanicked {
393 #[primary_span]
394 pub span: Span,
395 #[subdiagnostic]
396 pub message: Option<CustomAttributePanickedHelp>,
397}
398
399#[derive(Subdiagnostic)]
400#[help(expand_help)]
401pub(crate) struct CustomAttributePanickedHelp {
402 pub message: String,
403}
404
405#[derive(Diagnostic)]
406#[diag(expand_proc_macro_derive_tokens)]
407pub(crate) struct ProcMacroDeriveTokens {
408 #[primary_span]
409 pub span: Span,
410}
411
412#[derive(Diagnostic)]
413#[diag(expand_duplicate_matcher_binding)]
414pub(crate) struct DuplicateMatcherBinding {
415 #[primary_span]
416 #[label]
417 pub span: Span,
418 #[label(expand_label2)]
419 pub prev: Span,
420}
421
422#[derive(Diagnostic)]
423#[diag(expand_missing_fragment_specifier)]
424#[note]
425#[help(expand_valid)]
426pub(crate) struct MissingFragmentSpecifier {
427 #[primary_span]
428 pub span: Span,
429 #[suggestion(
430 expand_suggestion_add_fragspec,
431 style = "verbose",
432 code = ":spec",
433 applicability = "maybe-incorrect"
434 )]
435 pub add_span: Span,
436 pub valid: &'static str,
437}
438
439#[derive(Diagnostic)]
440#[diag(expand_invalid_fragment_specifier)]
441#[help]
442pub(crate) struct InvalidFragmentSpecifier {
443 #[primary_span]
444 pub span: Span,
445 pub fragment: Ident,
446 pub help: &'static str,
447}
448
449#[derive(Diagnostic)]
450#[diag(expand_expected_paren_or_brace)]
451pub(crate) struct ExpectedParenOrBrace<'a> {
452 #[primary_span]
453 pub span: Span,
454 pub token: Cow<'a, str>,
455}
456
457#[derive(Diagnostic)]
458#[diag(expand_empty_delegation_mac)]
459pub(crate) struct EmptyDelegationMac {
460 #[primary_span]
461 pub span: Span,
462 pub kind: String,
463}
464
465#[derive(Diagnostic)]
466#[diag(expand_glob_delegation_outside_impls)]
467pub(crate) struct GlobDelegationOutsideImpls {
468 #[primary_span]
469 pub span: Span,
470}
471
472#[derive(Diagnostic)]
473#[diag(expand_crate_name_in_cfg_attr)]
474pub(crate) struct CrateNameInCfgAttr {
475 #[primary_span]
476 pub span: Span,
477}
478
479#[derive(Diagnostic)]
480#[diag(expand_crate_type_in_cfg_attr)]
481pub(crate) struct CrateTypeInCfgAttr {
482 #[primary_span]
483 pub span: Span,
484}
485
486#[derive(Diagnostic)]
487#[diag(expand_glob_delegation_traitless_qpath)]
488pub(crate) struct GlobDelegationTraitlessQpath {
489 #[primary_span]
490 pub span: Span,
491}
492
493#[derive(Diagnostic)]
496#[diag(expand_proc_macro_back_compat)]
497#[note]
498pub(crate) struct ProcMacroBackCompat {
499 pub crate_name: String,
500 pub fixed_version: String,
501}