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