rustc_expand/
errors.rs

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)]
157pub(crate) struct FeatureRemoved<'a> {
158    #[primary_span]
159    #[label]
160    pub span: Span,
161    #[subdiagnostic]
162    pub reason: Option<FeatureRemovedReason<'a>>,
163}
164
165#[derive(Subdiagnostic)]
166#[note(expand_reason)]
167pub(crate) struct FeatureRemovedReason<'a> {
168    pub reason: &'a str,
169}
170
171#[derive(Diagnostic)]
172#[diag(expand_feature_not_allowed, code = E0725)]
173pub(crate) struct FeatureNotAllowed {
174    #[primary_span]
175    pub span: Span,
176    pub name: Symbol,
177}
178
179#[derive(Diagnostic)]
180#[diag(expand_recursion_limit_reached)]
181#[help]
182pub(crate) struct RecursionLimitReached<'a> {
183    #[primary_span]
184    pub span: Span,
185    pub descr: String,
186    pub suggested_limit: Limit,
187    pub crate_name: &'a str,
188}
189
190#[derive(Diagnostic)]
191#[diag(expand_malformed_feature_attribute, code = E0556)]
192pub(crate) struct MalformedFeatureAttribute {
193    #[primary_span]
194    pub span: Span,
195    #[subdiagnostic]
196    pub help: MalformedFeatureAttributeHelp,
197}
198
199#[derive(Subdiagnostic)]
200pub(crate) enum MalformedFeatureAttributeHelp {
201    #[label(expand_expected)]
202    Label {
203        #[primary_span]
204        span: Span,
205    },
206    #[suggestion(expand_expected, code = "{suggestion}", applicability = "maybe-incorrect")]
207    Suggestion {
208        #[primary_span]
209        span: Span,
210        suggestion: Symbol,
211    },
212}
213
214#[derive(Diagnostic)]
215#[diag(expand_remove_expr_not_supported)]
216pub(crate) struct RemoveExprNotSupported {
217    #[primary_span]
218    pub span: Span,
219}
220
221#[derive(Diagnostic)]
222pub(crate) enum InvalidCfg {
223    #[diag(expand_invalid_cfg_no_parens)]
224    NotFollowedByParens {
225        #[primary_span]
226        #[suggestion(
227            expand_invalid_cfg_expected_syntax,
228            code = "cfg(/* predicate */)",
229            applicability = "has-placeholders"
230        )]
231        span: Span,
232    },
233    #[diag(expand_invalid_cfg_no_predicate)]
234    NoPredicate {
235        #[primary_span]
236        #[suggestion(
237            expand_invalid_cfg_expected_syntax,
238            code = "cfg(/* predicate */)",
239            applicability = "has-placeholders"
240        )]
241        span: Span,
242    },
243    #[diag(expand_invalid_cfg_multiple_predicates)]
244    MultiplePredicates {
245        #[primary_span]
246        span: Span,
247    },
248    #[diag(expand_invalid_cfg_predicate_literal)]
249    PredicateLiteral {
250        #[primary_span]
251        span: Span,
252    },
253}
254
255#[derive(Diagnostic)]
256#[diag(expand_wrong_fragment_kind)]
257pub(crate) struct WrongFragmentKind<'a> {
258    #[primary_span]
259    pub span: Span,
260    pub kind: &'a str,
261    pub name: &'a ast::Path,
262}
263
264#[derive(Diagnostic)]
265#[diag(expand_unsupported_key_value)]
266pub(crate) struct UnsupportedKeyValue {
267    #[primary_span]
268    pub span: Span,
269}
270
271#[derive(Diagnostic)]
272#[diag(expand_incomplete_parse)]
273#[note]
274pub(crate) struct IncompleteParse<'a> {
275    #[primary_span]
276    pub span: Span,
277    pub descr: String,
278    #[label]
279    pub label_span: Span,
280    pub macro_path: &'a ast::Path,
281    pub kind_name: &'a str,
282    #[note(expand_macro_expands_to_match_arm)]
283    pub expands_to_match_arm: bool,
284
285    #[suggestion(
286        expand_suggestion_add_semi,
287        style = "verbose",
288        code = ";",
289        applicability = "maybe-incorrect"
290    )]
291    pub add_semicolon: Option<Span>,
292}
293
294#[derive(Diagnostic)]
295#[diag(expand_remove_node_not_supported)]
296pub(crate) struct RemoveNodeNotSupported {
297    #[primary_span]
298    pub span: Span,
299    pub descr: &'static str,
300}
301
302#[derive(Diagnostic)]
303#[diag(expand_module_circular)]
304pub(crate) struct ModuleCircular {
305    #[primary_span]
306    pub span: Span,
307    pub modules: String,
308}
309
310#[derive(Diagnostic)]
311#[diag(expand_module_in_block)]
312pub(crate) struct ModuleInBlock {
313    #[primary_span]
314    pub span: Span,
315    #[subdiagnostic]
316    pub name: Option<ModuleInBlockName>,
317}
318
319#[derive(Subdiagnostic)]
320#[note(expand_note)]
321pub(crate) struct ModuleInBlockName {
322    #[primary_span]
323    pub span: Span,
324    pub name: Ident,
325}
326
327#[derive(Diagnostic)]
328#[diag(expand_module_file_not_found, code = E0583)]
329#[help]
330#[note]
331pub(crate) struct ModuleFileNotFound {
332    #[primary_span]
333    pub span: Span,
334    pub name: Ident,
335    pub default_path: String,
336    pub secondary_path: String,
337}
338
339#[derive(Diagnostic)]
340#[diag(expand_module_multiple_candidates, code = E0761)]
341#[help]
342pub(crate) struct ModuleMultipleCandidates {
343    #[primary_span]
344    pub span: Span,
345    pub name: Ident,
346    pub default_path: String,
347    pub secondary_path: String,
348}
349
350#[derive(Diagnostic)]
351#[diag(expand_trace_macro)]
352pub(crate) struct TraceMacro {
353    #[primary_span]
354    pub span: Span,
355}
356
357#[derive(Diagnostic)]
358#[diag(expand_proc_macro_panicked)]
359pub(crate) struct ProcMacroPanicked {
360    #[primary_span]
361    pub span: Span,
362    #[subdiagnostic]
363    pub message: Option<ProcMacroPanickedHelp>,
364}
365
366#[derive(Subdiagnostic)]
367#[help(expand_help)]
368pub(crate) struct ProcMacroPanickedHelp {
369    pub message: String,
370}
371
372#[derive(Diagnostic)]
373#[diag(expand_proc_macro_derive_panicked)]
374pub(crate) struct ProcMacroDerivePanicked {
375    #[primary_span]
376    pub span: Span,
377    #[subdiagnostic]
378    pub message: Option<ProcMacroDerivePanickedHelp>,
379}
380
381#[derive(Subdiagnostic)]
382#[help(expand_help)]
383pub(crate) struct ProcMacroDerivePanickedHelp {
384    pub message: String,
385}
386
387#[derive(Diagnostic)]
388#[diag(expand_custom_attribute_panicked)]
389pub(crate) struct CustomAttributePanicked {
390    #[primary_span]
391    pub span: Span,
392    #[subdiagnostic]
393    pub message: Option<CustomAttributePanickedHelp>,
394}
395
396#[derive(Subdiagnostic)]
397#[help(expand_help)]
398pub(crate) struct CustomAttributePanickedHelp {
399    pub message: String,
400}
401
402#[derive(Diagnostic)]
403#[diag(expand_proc_macro_derive_tokens)]
404pub(crate) struct ProcMacroDeriveTokens {
405    #[primary_span]
406    pub span: Span,
407}
408
409#[derive(Diagnostic)]
410#[diag(expand_duplicate_matcher_binding)]
411pub(crate) struct DuplicateMatcherBinding {
412    #[primary_span]
413    #[label]
414    pub span: Span,
415    #[label(expand_label2)]
416    pub prev: Span,
417}
418
419#[derive(Diagnostic)]
420#[diag(expand_missing_fragment_specifier)]
421#[note]
422#[help(expand_valid)]
423pub(crate) struct MissingFragmentSpecifier {
424    #[primary_span]
425    pub span: Span,
426    #[suggestion(
427        expand_suggestion_add_fragspec,
428        style = "verbose",
429        code = ":spec",
430        applicability = "maybe-incorrect"
431    )]
432    pub add_span: Span,
433    pub valid: &'static str,
434}
435
436#[derive(Diagnostic)]
437#[diag(expand_invalid_fragment_specifier)]
438#[help]
439pub(crate) struct InvalidFragmentSpecifier {
440    #[primary_span]
441    pub span: Span,
442    pub fragment: Ident,
443    pub help: String,
444}
445
446#[derive(Diagnostic)]
447#[diag(expand_expected_paren_or_brace)]
448pub(crate) struct ExpectedParenOrBrace<'a> {
449    #[primary_span]
450    pub span: Span,
451    pub token: Cow<'a, str>,
452}
453
454#[derive(Diagnostic)]
455#[diag(expand_empty_delegation_mac)]
456pub(crate) struct EmptyDelegationMac {
457    #[primary_span]
458    pub span: Span,
459    pub kind: String,
460}
461
462#[derive(Diagnostic)]
463#[diag(expand_glob_delegation_outside_impls)]
464pub(crate) struct GlobDelegationOutsideImpls {
465    #[primary_span]
466    pub span: Span,
467}
468
469#[derive(Diagnostic)]
470#[diag(expand_crate_name_in_cfg_attr)]
471pub(crate) struct CrateNameInCfgAttr {
472    #[primary_span]
473    pub span: Span,
474}
475
476#[derive(Diagnostic)]
477#[diag(expand_crate_type_in_cfg_attr)]
478pub(crate) struct CrateTypeInCfgAttr {
479    #[primary_span]
480    pub span: Span,
481}
482
483#[derive(Diagnostic)]
484#[diag(expand_glob_delegation_traitless_qpath)]
485pub(crate) struct GlobDelegationTraitlessQpath {
486    #[primary_span]
487    pub span: Span,
488}
489
490// This used to be the `proc_macro_back_compat` lint (#83125). It was later
491// turned into a hard error.
492#[derive(Diagnostic)]
493#[diag(expand_proc_macro_back_compat)]
494#[note]
495pub(crate) struct ProcMacroBackCompat {
496    pub crate_name: String,
497    pub fixed_version: String,
498}