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