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#[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}