1use rustc_errors::codes::*;
2use rustc_errors::{Applicability, ElidedLifetimeInPathSubdiag, MultiSpan};
3use rustc_macros::{Diagnostic, Subdiagnostic};
4use rustc_span::{Ident, Span, Symbol};
5
6use crate::Res;
7use crate::late::PatternSource;
8
9#[derive(Diagnostic)]
10#[diag(resolve_generic_params_from_outer_item, code = E0401)]
11pub(crate) struct GenericParamsFromOuterItem {
12 #[primary_span]
13 #[label]
14 pub(crate) span: Span,
15 #[subdiagnostic]
16 pub(crate) label: Option<GenericParamsFromOuterItemLabel>,
17 #[label(resolve_refer_to_type_directly)]
18 pub(crate) refer_to_type_directly: Option<Span>,
19 #[subdiagnostic]
20 pub(crate) sugg: Option<GenericParamsFromOuterItemSugg>,
21 #[subdiagnostic]
22 pub(crate) static_or_const: Option<GenericParamsFromOuterItemStaticOrConst>,
23 pub(crate) is_self: bool,
24}
25
26#[derive(Subdiagnostic)]
27pub(crate) enum GenericParamsFromOuterItemStaticOrConst {
28 #[note(resolve_generic_params_from_outer_item_static)]
29 Static,
30 #[note(resolve_generic_params_from_outer_item_const)]
31 Const,
32}
33
34#[derive(Subdiagnostic)]
35pub(crate) enum GenericParamsFromOuterItemLabel {
36 #[label(resolve_generic_params_from_outer_item_self_ty_param)]
37 SelfTyParam(#[primary_span] Span),
38 #[label(resolve_generic_params_from_outer_item_self_ty_alias)]
39 SelfTyAlias(#[primary_span] Span),
40 #[label(resolve_generic_params_from_outer_item_ty_param)]
41 TyParam(#[primary_span] Span),
42 #[label(resolve_generic_params_from_outer_item_const_param)]
43 ConstParam(#[primary_span] Span),
44}
45
46#[derive(Subdiagnostic)]
47#[suggestion(resolve_suggestion, code = "{snippet}", applicability = "maybe-incorrect")]
48pub(crate) struct GenericParamsFromOuterItemSugg {
49 #[primary_span]
50 pub(crate) span: Span,
51 pub(crate) snippet: String,
52}
53
54#[derive(Diagnostic)]
55#[diag(resolve_name_is_already_used_as_generic_parameter, code = E0403)]
56pub(crate) struct NameAlreadyUsedInParameterList {
57 #[primary_span]
58 #[label]
59 pub(crate) span: Span,
60 #[label(resolve_first_use_of_name)]
61 pub(crate) first_use_span: Span,
62 pub(crate) name: Ident,
63}
64
65#[derive(Diagnostic)]
66#[diag(resolve_method_not_member_of_trait, code = E0407)]
67pub(crate) struct MethodNotMemberOfTrait {
68 #[primary_span]
69 #[label]
70 pub(crate) span: Span,
71 pub(crate) method: Ident,
72 pub(crate) trait_: String,
73 #[subdiagnostic]
74 pub(crate) sub: Option<AssociatedFnWithSimilarNameExists>,
75}
76
77#[derive(Subdiagnostic)]
78#[suggestion(
79 resolve_associated_fn_with_similar_name_exists,
80 code = "{candidate}",
81 applicability = "maybe-incorrect"
82)]
83pub(crate) struct AssociatedFnWithSimilarNameExists {
84 #[primary_span]
85 pub(crate) span: Span,
86 pub(crate) candidate: Symbol,
87}
88
89#[derive(Diagnostic)]
90#[diag(resolve_type_not_member_of_trait, code = E0437)]
91pub(crate) struct TypeNotMemberOfTrait {
92 #[primary_span]
93 #[label]
94 pub(crate) span: Span,
95 pub(crate) type_: Ident,
96 pub(crate) trait_: String,
97 #[subdiagnostic]
98 pub(crate) sub: Option<AssociatedTypeWithSimilarNameExists>,
99}
100
101#[derive(Subdiagnostic)]
102#[suggestion(
103 resolve_associated_type_with_similar_name_exists,
104 code = "{candidate}",
105 applicability = "maybe-incorrect"
106)]
107pub(crate) struct AssociatedTypeWithSimilarNameExists {
108 #[primary_span]
109 pub(crate) span: Span,
110 pub(crate) candidate: Symbol,
111}
112
113#[derive(Diagnostic)]
114#[diag(resolve_const_not_member_of_trait, code = E0438)]
115pub(crate) struct ConstNotMemberOfTrait {
116 #[primary_span]
117 #[label]
118 pub(crate) span: Span,
119 pub(crate) const_: Ident,
120 pub(crate) trait_: String,
121 #[subdiagnostic]
122 pub(crate) sub: Option<AssociatedConstWithSimilarNameExists>,
123}
124
125#[derive(Subdiagnostic)]
126#[suggestion(
127 resolve_associated_const_with_similar_name_exists,
128 code = "{candidate}",
129 applicability = "maybe-incorrect"
130)]
131pub(crate) struct AssociatedConstWithSimilarNameExists {
132 #[primary_span]
133 pub(crate) span: Span,
134 pub(crate) candidate: Symbol,
135}
136
137#[derive(Diagnostic)]
138#[diag(resolve_variable_bound_with_different_mode, code = E0409)]
139pub(crate) struct VariableBoundWithDifferentMode {
140 #[primary_span]
141 #[label]
142 pub(crate) span: Span,
143 #[label(resolve_first_binding_span)]
144 pub(crate) first_binding_span: Span,
145 pub(crate) variable_name: Ident,
146}
147
148#[derive(Diagnostic)]
149#[diag(resolve_ident_bound_more_than_once_in_parameter_list, code = E0415)]
150pub(crate) struct IdentifierBoundMoreThanOnceInParameterList {
151 #[primary_span]
152 #[label]
153 pub(crate) span: Span,
154 pub(crate) identifier: Ident,
155}
156
157#[derive(Diagnostic)]
158#[diag(resolve_ident_bound_more_than_once_in_same_pattern, code = E0416)]
159pub(crate) struct IdentifierBoundMoreThanOnceInSamePattern {
160 #[primary_span]
161 #[label]
162 pub(crate) span: Span,
163 pub(crate) identifier: Ident,
164}
165
166#[derive(Diagnostic)]
167#[diag(resolve_undeclared_label, code = E0426)]
168pub(crate) struct UndeclaredLabel {
169 #[primary_span]
170 #[label]
171 pub(crate) span: Span,
172 pub(crate) name: Symbol,
173 #[subdiagnostic]
174 pub(crate) sub_reachable: Option<LabelWithSimilarNameReachable>,
175 #[subdiagnostic]
176 pub(crate) sub_reachable_suggestion: Option<TryUsingSimilarlyNamedLabel>,
177 #[subdiagnostic]
178 pub(crate) sub_unreachable: Option<UnreachableLabelWithSimilarNameExists>,
179}
180
181#[derive(Subdiagnostic)]
182#[label(resolve_label_with_similar_name_reachable)]
183pub(crate) struct LabelWithSimilarNameReachable(#[primary_span] pub(crate) Span);
184
185#[derive(Subdiagnostic)]
186#[suggestion(
187 resolve_try_using_similarly_named_label,
188 code = "{ident_name}",
189 applicability = "maybe-incorrect"
190)]
191pub(crate) struct TryUsingSimilarlyNamedLabel {
192 #[primary_span]
193 pub(crate) span: Span,
194 pub(crate) ident_name: Symbol,
195}
196
197#[derive(Subdiagnostic)]
198#[label(resolve_unreachable_label_with_similar_name_exists)]
199pub(crate) struct UnreachableLabelWithSimilarNameExists {
200 #[primary_span]
201 pub(crate) ident_span: Span,
202}
203
204#[derive(Diagnostic)]
205#[diag(resolve_self_import_can_only_appear_once_in_the_list, code = E0430)]
206pub(crate) struct SelfImportCanOnlyAppearOnceInTheList {
207 #[primary_span]
208 #[label]
209 pub(crate) span: Span,
210}
211
212#[derive(Diagnostic)]
213#[diag(resolve_self_import_only_in_import_list_with_non_empty_prefix, code = E0431)]
214pub(crate) struct SelfImportOnlyInImportListWithNonEmptyPrefix {
215 #[primary_span]
216 #[label]
217 pub(crate) span: Span,
218}
219
220#[derive(Diagnostic)]
221#[diag(resolve_cannot_capture_dynamic_environment_in_fn_item, code = E0434)]
222#[help]
223pub(crate) struct CannotCaptureDynamicEnvironmentInFnItem {
224 #[primary_span]
225 pub(crate) span: Span,
226}
227
228#[derive(Diagnostic)]
229#[diag(resolve_attempt_to_use_non_constant_value_in_constant, code = E0435)]
230pub(crate) struct AttemptToUseNonConstantValueInConstant<'a> {
231 #[primary_span]
232 pub(crate) span: Span,
233 #[subdiagnostic]
234 pub(crate) with: Option<AttemptToUseNonConstantValueInConstantWithSuggestion<'a>>,
235 #[subdiagnostic]
236 pub(crate) with_label: Option<AttemptToUseNonConstantValueInConstantLabelWithSuggestion>,
237 #[subdiagnostic]
238 pub(crate) without: Option<AttemptToUseNonConstantValueInConstantWithoutSuggestion<'a>>,
239}
240
241#[derive(Subdiagnostic)]
242#[multipart_suggestion(
243 resolve_attempt_to_use_non_constant_value_in_constant_with_suggestion,
244 style = "verbose",
245 applicability = "has-placeholders"
246)]
247pub(crate) struct AttemptToUseNonConstantValueInConstantWithSuggestion<'a> {
248 #[suggestion_part(code = "{suggestion} ")]
250 pub(crate) span: Span,
251 pub(crate) suggestion: &'a str,
252 #[suggestion_part(code = ": /* Type */")]
253 pub(crate) type_span: Option<Span>,
254 pub(crate) current: &'a str,
255}
256
257#[derive(Subdiagnostic)]
258#[label(resolve_attempt_to_use_non_constant_value_in_constant_label_with_suggestion)]
259pub(crate) struct AttemptToUseNonConstantValueInConstantLabelWithSuggestion {
260 #[primary_span]
261 pub(crate) span: Span,
262}
263
264#[derive(Subdiagnostic)]
265#[label(resolve_attempt_to_use_non_constant_value_in_constant_without_suggestion)]
266pub(crate) struct AttemptToUseNonConstantValueInConstantWithoutSuggestion<'a> {
267 #[primary_span]
268 pub(crate) ident_span: Span,
269 pub(crate) suggestion: &'a str,
270}
271
272#[derive(Diagnostic)]
273#[diag(resolve_self_imports_only_allowed_within, code = E0429)]
274pub(crate) struct SelfImportsOnlyAllowedWithin {
275 #[primary_span]
276 pub(crate) span: Span,
277 #[subdiagnostic]
278 pub(crate) suggestion: Option<SelfImportsOnlyAllowedWithinSuggestion>,
279 #[subdiagnostic]
280 pub(crate) mpart_suggestion: Option<SelfImportsOnlyAllowedWithinMultipartSuggestion>,
281}
282
283#[derive(Subdiagnostic)]
284#[suggestion(
285 resolve_self_imports_only_allowed_within_suggestion,
286 code = "",
287 applicability = "machine-applicable"
288)]
289pub(crate) struct SelfImportsOnlyAllowedWithinSuggestion {
290 #[primary_span]
291 pub(crate) span: Span,
292}
293
294#[derive(Subdiagnostic)]
295#[multipart_suggestion(
296 resolve_self_imports_only_allowed_within_multipart_suggestion,
297 applicability = "machine-applicable"
298)]
299pub(crate) struct SelfImportsOnlyAllowedWithinMultipartSuggestion {
300 #[suggestion_part(code = "{{")]
301 pub(crate) multipart_start: Span,
302 #[suggestion_part(code = "}}")]
303 pub(crate) multipart_end: Span,
304}
305
306#[derive(Diagnostic)]
307#[diag(resolve_binding_shadows_something_unacceptable, code = E0530)]
308pub(crate) struct BindingShadowsSomethingUnacceptable<'a> {
309 #[primary_span]
310 #[label]
311 pub(crate) span: Span,
312 pub(crate) shadowing_binding: PatternSource,
313 pub(crate) shadowed_binding: Res,
314 pub(crate) article: &'a str,
315 #[subdiagnostic]
316 pub(crate) sub_suggestion: Option<BindingShadowsSomethingUnacceptableSuggestion>,
317 #[label(resolve_label_shadowed_binding)]
318 pub(crate) shadowed_binding_span: Span,
319 pub(crate) participle: &'a str,
320 pub(crate) name: Symbol,
321}
322
323#[derive(Subdiagnostic)]
324#[suggestion(
325 resolve_binding_shadows_something_unacceptable_suggestion,
326 code = "{name}(..)",
327 applicability = "unspecified"
328)]
329pub(crate) struct BindingShadowsSomethingUnacceptableSuggestion {
330 #[primary_span]
331 pub(crate) span: Span,
332 pub(crate) name: Symbol,
333}
334
335#[derive(Diagnostic)]
336#[diag(resolve_forward_declared_generic_param, code = E0128)]
337pub(crate) struct ForwardDeclaredGenericParam {
338 #[primary_span]
339 #[label]
340 pub(crate) span: Span,
341}
342
343#[derive(Diagnostic)]
344#[diag(resolve_param_in_ty_of_const_param, code = E0770)]
345pub(crate) struct ParamInTyOfConstParam {
346 #[primary_span]
347 #[label]
348 pub(crate) span: Span,
349 pub(crate) name: Symbol,
350 #[subdiagnostic]
351 pub(crate) param_kind: Option<ParamKindInTyOfConstParam>,
352}
353
354#[derive(Debug)]
355#[derive(Subdiagnostic)]
356pub(crate) enum ParamKindInTyOfConstParam {
357 #[note(resolve_type_param_in_ty_of_const_param)]
358 Type,
359 #[note(resolve_const_param_in_ty_of_const_param)]
360 Const,
361 #[note(resolve_lifetime_param_in_ty_of_const_param)]
362 Lifetime,
363}
364
365#[derive(Diagnostic)]
366#[diag(resolve_self_in_generic_param_default, code = E0735)]
367pub(crate) struct SelfInGenericParamDefault {
368 #[primary_span]
369 #[label]
370 pub(crate) span: Span,
371}
372
373#[derive(Diagnostic)]
374#[diag(resolve_param_in_non_trivial_anon_const)]
375pub(crate) struct ParamInNonTrivialAnonConst {
376 #[primary_span]
377 #[label]
378 pub(crate) span: Span,
379 pub(crate) name: Symbol,
380 #[subdiagnostic]
381 pub(crate) param_kind: ParamKindInNonTrivialAnonConst,
382 #[subdiagnostic]
383 pub(crate) help: Option<ParamInNonTrivialAnonConstHelp>,
384}
385
386#[derive(Subdiagnostic)]
387#[help(resolve_param_in_non_trivial_anon_const_help)]
388pub(crate) struct ParamInNonTrivialAnonConstHelp;
389
390#[derive(Debug)]
391#[derive(Subdiagnostic)]
392pub(crate) enum ParamKindInNonTrivialAnonConst {
393 #[note(resolve_type_param_in_non_trivial_anon_const)]
394 Type,
395 #[help(resolve_const_param_in_non_trivial_anon_const)]
396 Const { name: Symbol },
397 #[note(resolve_lifetime_param_in_non_trivial_anon_const)]
398 Lifetime,
399}
400
401#[derive(Diagnostic)]
402#[diag(resolve_unreachable_label, code = E0767)]
403#[note]
404pub(crate) struct UnreachableLabel {
405 #[primary_span]
406 #[label]
407 pub(crate) span: Span,
408 pub(crate) name: Symbol,
409 #[label(resolve_label_definition_span)]
410 pub(crate) definition_span: Span,
411 #[subdiagnostic]
412 pub(crate) sub_suggestion: Option<UnreachableLabelSubSuggestion>,
413 #[subdiagnostic]
414 pub(crate) sub_suggestion_label: Option<UnreachableLabelSubLabel>,
415 #[subdiagnostic]
416 pub(crate) sub_unreachable_label: Option<UnreachableLabelSubLabelUnreachable>,
417}
418
419#[derive(Subdiagnostic)]
420#[suggestion(
421 resolve_unreachable_label_suggestion_use_similarly_named,
422 code = "{ident_name}",
423 applicability = "maybe-incorrect"
424)]
425pub(crate) struct UnreachableLabelSubSuggestion {
426 #[primary_span]
427 pub(crate) span: Span,
428 pub(crate) ident_name: Symbol,
429}
430
431#[derive(Subdiagnostic)]
432#[label(resolve_unreachable_label_similar_name_reachable)]
433pub(crate) struct UnreachableLabelSubLabel {
434 #[primary_span]
435 pub(crate) ident_span: Span,
436}
437
438#[derive(Subdiagnostic)]
439#[label(resolve_unreachable_label_similar_name_unreachable)]
440pub(crate) struct UnreachableLabelSubLabelUnreachable {
441 #[primary_span]
442 pub(crate) ident_span: Span,
443}
444
445#[derive(Diagnostic)]
446#[diag(resolve_invalid_asm_sym)]
447#[help]
448pub(crate) struct InvalidAsmSym {
449 #[primary_span]
450 #[label]
451 pub(crate) span: Span,
452}
453
454#[derive(Diagnostic)]
455#[diag(resolve_lowercase_self)]
456pub(crate) struct LowercaseSelf {
457 #[primary_span]
458 #[suggestion(code = "Self", applicability = "maybe-incorrect", style = "short")]
459 pub(crate) span: Span,
460}
461
462#[derive(Debug)]
463#[derive(Diagnostic)]
464#[diag(resolve_binding_in_never_pattern)]
465pub(crate) struct BindingInNeverPattern {
466 #[primary_span]
467 #[suggestion(code = "_", applicability = "machine-applicable", style = "short")]
468 pub(crate) span: Span,
469}
470
471#[derive(Diagnostic)]
472#[diag(resolve_trait_impl_duplicate, code = E0201)]
473pub(crate) struct TraitImplDuplicate {
474 #[primary_span]
475 #[label]
476 pub(crate) span: Span,
477 #[label(resolve_old_span_label)]
478 pub(crate) old_span: Span,
479 #[label(resolve_trait_item_span)]
480 pub(crate) trait_item_span: Span,
481 pub(crate) name: Ident,
482}
483
484#[derive(Diagnostic)]
485#[diag(resolve_relative_2018)]
486pub(crate) struct Relative2018 {
487 #[primary_span]
488 pub(crate) span: Span,
489 #[suggestion(code = "crate::{path_str}", applicability = "maybe-incorrect")]
490 pub(crate) path_span: Span,
491 pub(crate) path_str: String,
492}
493
494#[derive(Diagnostic)]
495#[diag(resolve_ancestor_only, code = E0742)]
496pub(crate) struct AncestorOnly(#[primary_span] pub(crate) Span);
497
498#[derive(Diagnostic)]
499#[diag(resolve_expected_module_found, code = E0577)]
500pub(crate) struct ExpectedModuleFound {
501 #[primary_span]
502 #[label]
503 pub(crate) span: Span,
504 pub(crate) res: Res,
505 pub(crate) path_str: String,
506}
507
508#[derive(Diagnostic)]
509#[diag(resolve_indeterminate, code = E0578)]
510pub(crate) struct Indeterminate(#[primary_span] pub(crate) Span);
511
512#[derive(Diagnostic)]
513#[diag(resolve_tool_module_imported)]
514pub(crate) struct ToolModuleImported {
515 #[primary_span]
516 pub(crate) span: Span,
517 #[note]
518 pub(crate) import: Span,
519}
520
521#[derive(Diagnostic)]
522#[diag(resolve_module_only)]
523pub(crate) struct ModuleOnly(#[primary_span] pub(crate) Span);
524
525#[derive(Diagnostic)]
526#[diag(resolve_macro_expected_found)]
527pub(crate) struct MacroExpectedFound<'a> {
528 #[primary_span]
529 #[label]
530 pub(crate) span: Span,
531 pub(crate) found: &'a str,
532 pub(crate) article: &'static str,
533 pub(crate) expected: &'a str,
534 pub(crate) macro_path: &'a str,
535 #[subdiagnostic]
536 pub(crate) remove_surrounding_derive: Option<RemoveSurroundingDerive>,
537 #[subdiagnostic]
538 pub(crate) add_as_non_derive: Option<AddAsNonDerive<'a>>,
539}
540
541#[derive(Subdiagnostic)]
542#[help(resolve_remove_surrounding_derive)]
543pub(crate) struct RemoveSurroundingDerive {
544 #[primary_span]
545 pub(crate) span: Span,
546}
547
548#[derive(Subdiagnostic)]
549#[help(resolve_add_as_non_derive)]
550pub(crate) struct AddAsNonDerive<'a> {
551 pub(crate) macro_path: &'a str,
552}
553
554#[derive(Diagnostic)]
555#[diag(resolve_proc_macro_same_crate)]
556pub(crate) struct ProcMacroSameCrate {
557 #[primary_span]
558 pub(crate) span: Span,
559 #[help]
560 pub(crate) is_test: bool,
561}
562
563#[derive(Diagnostic)]
564#[diag(resolve_imported_crate)]
565pub(crate) struct CrateImported {
566 #[primary_span]
567 pub(crate) span: Span,
568}
569
570#[derive(Diagnostic)]
571#[diag(resolve_macro_use_extern_crate_self)]
572pub(crate) struct MacroUseExternCrateSelf {
573 #[primary_span]
574 pub(crate) span: Span,
575}
576
577#[derive(Diagnostic)]
578#[diag(resolve_accessible_unsure)]
579#[note]
580pub(crate) struct CfgAccessibleUnsure {
581 #[primary_span]
582 pub(crate) span: Span,
583}
584
585#[derive(Debug)]
586#[derive(Diagnostic)]
587#[diag(resolve_param_in_enum_discriminant)]
588pub(crate) struct ParamInEnumDiscriminant {
589 #[primary_span]
590 #[label]
591 pub(crate) span: Span,
592 pub(crate) name: Symbol,
593 #[subdiagnostic]
594 pub(crate) param_kind: ParamKindInEnumDiscriminant,
595}
596
597#[derive(Debug)]
598#[derive(Subdiagnostic)]
599pub(crate) enum ParamKindInEnumDiscriminant {
600 #[note(resolve_type_param_in_enum_discriminant)]
601 Type,
602 #[note(resolve_const_param_in_enum_discriminant)]
603 Const,
604 #[note(resolve_lifetime_param_in_enum_discriminant)]
605 Lifetime,
606}
607
608#[derive(Subdiagnostic)]
609#[label(resolve_change_import_binding)]
610pub(crate) struct ChangeImportBinding {
611 #[primary_span]
612 pub(crate) span: Span,
613}
614
615#[derive(Subdiagnostic)]
616#[suggestion(
617 resolve_change_import_binding,
618 code = "{suggestion}",
619 applicability = "maybe-incorrect"
620)]
621pub(crate) struct ChangeImportBindingSuggestion {
622 #[primary_span]
623 pub(crate) span: Span,
624 pub(crate) suggestion: String,
625}
626
627#[derive(Diagnostic)]
628#[diag(resolve_imports_cannot_refer_to)]
629pub(crate) struct ImportsCannotReferTo<'a> {
630 #[primary_span]
631 pub(crate) span: Span,
632 pub(crate) what: &'a str,
633}
634
635#[derive(Diagnostic)]
636#[diag(resolve_cannot_find_ident_in_this_scope)]
637pub(crate) struct CannotFindIdentInThisScope<'a> {
638 #[primary_span]
639 pub(crate) span: Span,
640 pub(crate) expected: &'a str,
641 pub(crate) ident: Ident,
642}
643
644#[derive(Subdiagnostic)]
645#[note(resolve_explicit_unsafe_traits)]
646pub(crate) struct ExplicitUnsafeTraits {
647 #[primary_span]
648 pub(crate) span: Span,
649 pub(crate) ident: Ident,
650}
651
652#[derive(Subdiagnostic)]
653#[note(resolve_macro_defined_later)]
654pub(crate) struct MacroDefinedLater {
655 #[primary_span]
656 pub(crate) span: Span,
657}
658
659#[derive(Subdiagnostic)]
660#[label(resolve_consider_move_macro_position)]
661pub(crate) struct MacroSuggMovePosition {
662 #[primary_span]
663 pub(crate) span: Span,
664 pub(crate) ident: Ident,
665}
666
667#[derive(Subdiagnostic)]
668pub(crate) enum MacroRulesNot {
669 #[label(resolve_macro_cannot_use_as_attr)]
670 Attr {
671 #[primary_span]
672 span: Span,
673 ident: Ident,
674 },
675 #[label(resolve_macro_cannot_use_as_derive)]
676 Derive {
677 #[primary_span]
678 span: Span,
679 ident: Ident,
680 },
681}
682
683#[derive(Subdiagnostic)]
684#[note(resolve_missing_macro_rules_name)]
685pub(crate) struct MaybeMissingMacroRulesName {
686 #[primary_span]
687 pub(crate) spans: MultiSpan,
688}
689
690#[derive(Subdiagnostic)]
691#[help(resolve_added_macro_use)]
692pub(crate) struct AddedMacroUse;
693
694#[derive(Subdiagnostic)]
695#[suggestion(
696 resolve_consider_adding_a_derive,
697 code = "{suggestion}",
698 applicability = "maybe-incorrect"
699)]
700pub(crate) struct ConsiderAddingADerive {
701 #[primary_span]
702 pub(crate) span: Span,
703 pub(crate) suggestion: String,
704}
705
706#[derive(Diagnostic)]
707#[diag(resolve_cannot_determine_import_resolution)]
708pub(crate) struct CannotDetermineImportResolution {
709 #[primary_span]
710 pub(crate) span: Span,
711}
712
713#[derive(Diagnostic)]
714#[diag(resolve_cannot_determine_macro_resolution)]
715#[note]
716pub(crate) struct CannotDetermineMacroResolution {
717 #[primary_span]
718 pub(crate) span: Span,
719 pub(crate) kind: &'static str,
720 pub(crate) path: String,
721}
722
723#[derive(Diagnostic)]
724#[diag(resolve_cannot_be_reexported_private, code = E0364)]
725pub(crate) struct CannotBeReexportedPrivate {
726 #[primary_span]
727 pub(crate) span: Span,
728 pub(crate) ident: Ident,
729}
730
731#[derive(Diagnostic)]
732#[diag(resolve_cannot_be_reexported_crate_public, code = E0364)]
733pub(crate) struct CannotBeReexportedCratePublic {
734 #[primary_span]
735 pub(crate) span: Span,
736 pub(crate) ident: Ident,
737}
738
739#[derive(Diagnostic)]
740#[diag(resolve_cannot_be_reexported_private, code = E0365)]
741#[note(resolve_consider_declaring_with_pub)]
742pub(crate) struct CannotBeReexportedPrivateNS {
743 #[primary_span]
744 #[label(resolve_reexport_of_private)]
745 pub(crate) span: Span,
746 pub(crate) ident: Ident,
747}
748
749#[derive(Diagnostic)]
750#[diag(resolve_cannot_be_reexported_crate_public, code = E0365)]
751#[note(resolve_consider_declaring_with_pub)]
752pub(crate) struct CannotBeReexportedCratePublicNS {
753 #[primary_span]
754 #[label(resolve_reexport_of_crate_public)]
755 pub(crate) span: Span,
756 pub(crate) ident: Ident,
757}
758
759#[derive(Subdiagnostic)]
760#[help(resolve_consider_adding_macro_export)]
761pub(crate) struct ConsiderAddingMacroExport {
762 #[primary_span]
763 pub(crate) span: Span,
764}
765
766#[derive(Subdiagnostic)]
767#[note(resolve_consider_marking_as_pub)]
768pub(crate) struct ConsiderMarkingAsPub {
769 #[primary_span]
770 pub(crate) span: Span,
771 pub(crate) ident: Ident,
772}
773
774#[derive(Diagnostic)]
775#[diag(resolve_cannot_glob_import_possible_crates)]
776pub(crate) struct CannotGlobImportAllCrates {
777 #[primary_span]
778 pub(crate) span: Span,
779}
780
781#[derive(Diagnostic)]
782#[diag(resolve_items_in_traits_are_not_importable)]
783pub(crate) struct ItemsInTraitsAreNotImportable {
784 #[primary_span]
785 pub(crate) span: Span,
786}
787
788#[derive(Diagnostic)]
789#[diag(resolve_is_not_directly_importable, code = E0253)]
790pub(crate) struct IsNotDirectlyImportable {
791 #[primary_span]
792 #[label]
793 pub(crate) span: Span,
794 pub(crate) target: Ident,
795}
796
797#[derive(Subdiagnostic)]
798#[suggestion(
799 resolve_unexpected_res_change_ty_to_const_param_sugg,
800 code = "const ",
801 style = "verbose"
802)]
803pub(crate) struct UnexpectedResChangeTyToConstParamSugg {
804 #[primary_span]
805 pub span: Span,
806 #[applicability]
807 pub applicability: Applicability,
808}
809
810#[derive(Subdiagnostic)]
811#[suggestion(
812 resolve_unexpected_res_use_at_op_in_slice_pat_with_range_sugg,
813 code = "{snippet}",
814 applicability = "maybe-incorrect",
815 style = "verbose"
816)]
817pub(crate) struct UnexpectedResUseAtOpInSlicePatWithRangeSugg {
818 #[primary_span]
819 pub span: Span,
820 pub ident: Ident,
821 pub snippet: String,
822}
823
824#[derive(Diagnostic)]
825#[diag(resolve_extern_crate_loading_macro_not_at_crate_root, code = E0468)]
826pub(crate) struct ExternCrateLoadingMacroNotAtCrateRoot {
827 #[primary_span]
828 pub(crate) span: Span,
829}
830
831#[derive(Diagnostic)]
832#[diag(resolve_bad_macro_import, code = E0466)]
833pub(crate) struct BadMacroImport {
834 #[primary_span]
835 pub(crate) span: Span,
836}
837
838#[derive(Diagnostic)]
839#[diag(resolve_extern_crate_self_requires_renaming)]
840pub(crate) struct ExternCrateSelfRequiresRenaming {
841 #[primary_span]
842 #[suggestion(code = "extern crate self as name;", applicability = "has-placeholders")]
843 pub(crate) span: Span,
844}
845
846#[derive(Diagnostic)]
847#[diag(resolve_macro_use_name_already_in_use)]
848#[note]
849pub(crate) struct MacroUseNameAlreadyInUse {
850 #[primary_span]
851 pub(crate) span: Span,
852 pub(crate) name: Symbol,
853}
854
855#[derive(Diagnostic)]
856#[diag(resolve_imported_macro_not_found, code = E0469)]
857pub(crate) struct ImportedMacroNotFound {
858 #[primary_span]
859 pub(crate) span: Span,
860}
861
862#[derive(Diagnostic)]
863#[diag(resolve_macro_extern_deprecated)]
864pub(crate) struct MacroExternDeprecated {
865 #[primary_span]
866 pub(crate) span: Span,
867 #[help]
868 pub inner_attribute: bool,
869}
870
871#[derive(Diagnostic)]
872#[diag(resolve_arguments_macro_use_not_allowed)]
873pub(crate) struct ArgumentsMacroUseNotAllowed {
874 #[primary_span]
875 pub(crate) span: Span,
876}
877
878#[derive(Diagnostic)]
879#[diag(resolve_unnamed_crate_root_import)]
880pub(crate) struct UnnamedCrateRootImport {
881 #[primary_span]
882 pub(crate) span: Span,
883}
884
885#[derive(Diagnostic)]
886#[diag(resolve_macro_expanded_extern_crate_cannot_shadow_extern_arguments)]
887pub(crate) struct MacroExpandedExternCrateCannotShadowExternArguments {
888 #[primary_span]
889 pub(crate) span: Span,
890}
891
892#[derive(Diagnostic)]
893#[diag(resolve_elided_anonymous_lifetime_report_error, code = E0637)]
894pub(crate) struct ElidedAnonymousLivetimeReportError {
895 #[primary_span]
896 #[label]
897 pub(crate) span: Span,
898 #[subdiagnostic]
899 pub(crate) suggestion: Option<ElidedAnonymousLivetimeReportErrorSuggestion>,
900}
901
902#[derive(Diagnostic)]
903#[diag(resolve_lending_iterator_report_error)]
904pub(crate) struct LendingIteratorReportError {
905 #[primary_span]
906 pub(crate) lifetime: Span,
907 #[note]
908 pub(crate) ty: Span,
909}
910
911#[derive(Diagnostic)]
912#[diag(resolve_anonymous_lifetime_non_gat_report_error)]
913pub(crate) struct AnonymousLivetimeNonGatReportError {
914 #[primary_span]
915 #[label]
916 pub(crate) lifetime: Span,
917}
918
919#[derive(Subdiagnostic)]
920#[multipart_suggestion(
921 resolve_elided_anonymous_lifetime_report_error_suggestion,
922 applicability = "machine-applicable"
923)]
924pub(crate) struct ElidedAnonymousLivetimeReportErrorSuggestion {
925 #[suggestion_part(code = "for<'a> ")]
926 pub(crate) lo: Span,
927 #[suggestion_part(code = "'a ")]
928 pub(crate) hi: Span,
929}
930
931#[derive(Diagnostic)]
932#[diag(resolve_explicit_anonymous_lifetime_report_error, code = E0637)]
933pub(crate) struct ExplicitAnonymousLivetimeReportError {
934 #[primary_span]
935 #[label]
936 pub(crate) span: Span,
937}
938
939#[derive(Diagnostic)]
940#[diag(resolve_implicit_elided_lifetimes_not_allowed_here, code = E0726)]
941pub(crate) struct ImplicitElidedLifetimeNotAllowedHere {
942 #[primary_span]
943 pub(crate) span: Span,
944 #[subdiagnostic]
945 pub(crate) subdiag: ElidedLifetimeInPathSubdiag,
946}
947
948#[derive(Diagnostic)]
949#[diag(resolve_underscore_lifetime_is_reserved, code = E0637)]
950pub(crate) struct UnderscoreLifetimeIsReserved {
951 #[primary_span]
952 #[label]
953 pub(crate) span: Span,
954}
955
956#[derive(Diagnostic)]
957#[diag(resolve_static_lifetime_is_reserved, code = E0262)]
958pub(crate) struct StaticLifetimeIsReserved {
959 #[primary_span]
960 #[label]
961 pub(crate) span: Span,
962 pub(crate) lifetime: Ident,
963}
964
965#[derive(Diagnostic)]
966#[diag(resolve_attempt_to_define_builtin_macro_twice, code = E0773)]
967pub(crate) struct AttemptToDefineBuiltinMacroTwice {
968 #[primary_span]
969 pub(crate) span: Span,
970 #[note]
971 pub(crate) note_span: Span,
972}
973
974#[derive(Diagnostic)]
975#[diag(resolve_variable_is_not_bound_in_all_patterns, code = E0408)]
976pub(crate) struct VariableIsNotBoundInAllPatterns {
977 #[primary_span]
978 pub(crate) multispan: MultiSpan,
979 pub(crate) name: Ident,
980}
981
982#[derive(Subdiagnostic, Debug, Clone)]
983#[label(resolve_pattern_doesnt_bind_name)]
984pub(crate) struct PatternDoesntBindName {
985 #[primary_span]
986 pub(crate) span: Span,
987 pub(crate) name: Ident,
988}
989
990#[derive(Subdiagnostic, Debug, Clone)]
991#[label(resolve_variable_not_in_all_patterns)]
992pub(crate) struct VariableNotInAllPatterns {
993 #[primary_span]
994 pub(crate) span: Span,
995}
996
997#[derive(Diagnostic)]
998#[diag(resolve_name_defined_multiple_time)]
999#[note]
1000pub(crate) struct NameDefinedMultipleTime {
1001 #[primary_span]
1002 pub(crate) span: Span,
1003 pub(crate) descr: &'static str,
1004 pub(crate) container: &'static str,
1005 #[subdiagnostic]
1006 pub(crate) label: NameDefinedMultipleTimeLabel,
1007 #[subdiagnostic]
1008 pub(crate) old_binding_label: Option<NameDefinedMultipleTimeOldBindingLabel>,
1009}
1010
1011#[derive(Subdiagnostic)]
1012pub(crate) enum NameDefinedMultipleTimeLabel {
1013 #[label(resolve_name_defined_multiple_time_reimported)]
1014 Reimported {
1015 #[primary_span]
1016 span: Span,
1017 name: Symbol,
1018 },
1019 #[label(resolve_name_defined_multiple_time_redefined)]
1020 Redefined {
1021 #[primary_span]
1022 span: Span,
1023 name: Symbol,
1024 },
1025}
1026
1027#[derive(Subdiagnostic)]
1028pub(crate) enum NameDefinedMultipleTimeOldBindingLabel {
1029 #[label(resolve_name_defined_multiple_time_old_binding_import)]
1030 Import {
1031 #[primary_span]
1032 span: Span,
1033 name: Symbol,
1034 old_kind: &'static str,
1035 },
1036 #[label(resolve_name_defined_multiple_time_old_binding_definition)]
1037 Definition {
1038 #[primary_span]
1039 span: Span,
1040 name: Symbol,
1041 old_kind: &'static str,
1042 },
1043}
1044
1045#[derive(Diagnostic)]
1046#[diag(resolve_is_private, code = E0603)]
1047pub(crate) struct IsPrivate<'a> {
1048 #[primary_span]
1049 #[label]
1050 pub(crate) span: Span,
1051 pub(crate) ident_descr: &'a str,
1052 pub(crate) ident: Ident,
1053}
1054
1055#[derive(Diagnostic)]
1056#[diag(resolve_generic_arguments_in_macro_path)]
1057pub(crate) struct GenericArgumentsInMacroPath {
1058 #[primary_span]
1059 pub(crate) span: Span,
1060}
1061
1062#[derive(Diagnostic)]
1063#[diag(resolve_attributes_starting_with_rustc_are_reserved)]
1064pub(crate) struct AttributesStartingWithRustcAreReserved {
1065 #[primary_span]
1066 pub(crate) span: Span,
1067}
1068
1069#[derive(Diagnostic)]
1070#[diag(resolve_cannot_use_through_an_import)]
1071pub(crate) struct CannotUseThroughAnImport {
1072 #[primary_span]
1073 pub(crate) span: Span,
1074 pub(crate) article: &'static str,
1075 pub(crate) descr: &'static str,
1076 #[note]
1077 pub(crate) binding_span: Option<Span>,
1078}
1079
1080#[derive(Diagnostic)]
1081#[diag(resolve_name_reserved_in_attribute_namespace)]
1082pub(crate) struct NameReservedInAttributeNamespace {
1083 #[primary_span]
1084 pub(crate) span: Span,
1085 pub(crate) ident: Ident,
1086}
1087
1088#[derive(Diagnostic)]
1089#[diag(resolve_cannot_find_builtin_macro_with_name)]
1090pub(crate) struct CannotFindBuiltinMacroWithName {
1091 #[primary_span]
1092 pub(crate) span: Span,
1093 pub(crate) ident: Ident,
1094}
1095
1096#[derive(Diagnostic)]
1097#[diag(resolve_tool_was_already_registered)]
1098pub(crate) struct ToolWasAlreadyRegistered {
1099 #[primary_span]
1100 pub(crate) span: Span,
1101 pub(crate) tool: Ident,
1102 #[label]
1103 pub(crate) old_ident_span: Span,
1104}
1105
1106#[derive(Diagnostic)]
1107#[diag(resolve_tool_only_accepts_identifiers)]
1108pub(crate) struct ToolOnlyAcceptsIdentifiers {
1109 #[primary_span]
1110 #[label]
1111 pub(crate) span: Span,
1112 pub(crate) tool: Symbol,
1113}
1114
1115#[derive(Subdiagnostic)]
1116pub(crate) enum DefinedHere {
1117 #[label(resolve_similarly_named_defined_here)]
1118 SimilarlyNamed {
1119 #[primary_span]
1120 span: Span,
1121 candidate_descr: &'static str,
1122 candidate: Symbol,
1123 },
1124 #[label(resolve_single_item_defined_here)]
1125 SingleItem {
1126 #[primary_span]
1127 span: Span,
1128 candidate_descr: &'static str,
1129 candidate: Symbol,
1130 },
1131}
1132
1133#[derive(Subdiagnostic)]
1134#[label(resolve_outer_ident_is_not_publicly_reexported)]
1135pub(crate) struct OuterIdentIsNotPubliclyReexported {
1136 #[primary_span]
1137 pub(crate) span: Span,
1138 pub(crate) outer_ident_descr: &'static str,
1139 pub(crate) outer_ident: Ident,
1140}
1141
1142#[derive(Subdiagnostic)]
1143#[label(resolve_constructor_private_if_any_field_private)]
1144pub(crate) struct ConstructorPrivateIfAnyFieldPrivate {
1145 #[primary_span]
1146 pub(crate) span: Span,
1147}
1148
1149#[derive(Subdiagnostic)]
1150#[multipart_suggestion(
1151 resolve_consider_making_the_field_public,
1152 applicability = "maybe-incorrect",
1153 style = "verbose"
1154)]
1155pub(crate) struct ConsiderMakingTheFieldPublic {
1156 #[suggestion_part(code = "pub ")]
1157 pub(crate) spans: Vec<Span>,
1158 pub(crate) number_of_fields: usize,
1159}
1160
1161#[derive(Subdiagnostic)]
1162pub(crate) enum ImportIdent {
1163 #[suggestion(
1164 resolve_suggestion_import_ident_through_reexport,
1165 code = "{path}",
1166 applicability = "machine-applicable",
1167 style = "verbose"
1168 )]
1169 ThroughReExport {
1170 #[primary_span]
1171 span: Span,
1172 ident: Ident,
1173 path: String,
1174 },
1175 #[suggestion(
1176 resolve_suggestion_import_ident_directly,
1177 code = "{path}",
1178 applicability = "machine-applicable",
1179 style = "verbose"
1180 )]
1181 Directly {
1182 #[primary_span]
1183 span: Span,
1184 ident: Ident,
1185 path: String,
1186 },
1187}
1188
1189#[derive(Subdiagnostic)]
1190#[note(resolve_note_and_refers_to_the_item_defined_here)]
1191pub(crate) struct NoteAndRefersToTheItemDefinedHere<'a> {
1192 #[primary_span]
1193 pub(crate) span: MultiSpan,
1194 pub(crate) binding_descr: &'a str,
1195 pub(crate) binding_name: Ident,
1196 pub(crate) first: bool,
1197 pub(crate) dots: bool,
1198}
1199
1200#[derive(Subdiagnostic)]
1201#[suggestion(resolve_remove_unnecessary_import, code = "", applicability = "maybe-incorrect")]
1202pub(crate) struct RemoveUnnecessaryImport {
1203 #[primary_span]
1204 pub(crate) span: Span,
1205}
1206
1207#[derive(Subdiagnostic)]
1208#[suggestion(
1209 resolve_remove_unnecessary_import,
1210 code = "",
1211 applicability = "maybe-incorrect",
1212 style = "tool-only"
1213)]
1214pub(crate) struct ToolOnlyRemoveUnnecessaryImport {
1215 #[primary_span]
1216 pub(crate) span: Span,
1217}
1218
1219#[derive(Subdiagnostic)]
1220#[note(resolve_ident_imported_here_but_it_is_desc)]
1221pub(crate) struct IdentImporterHereButItIsDesc<'a> {
1222 #[primary_span]
1223 pub(crate) span: Span,
1224 pub(crate) imported_ident: Ident,
1225 pub(crate) imported_ident_desc: &'a str,
1226}
1227
1228#[derive(Subdiagnostic)]
1229#[note(resolve_ident_in_scope_but_it_is_desc)]
1230pub(crate) struct IdentInScopeButItIsDesc<'a> {
1231 pub(crate) imported_ident: Ident,
1232 pub(crate) imported_ident_desc: &'a str,
1233}
1234
1235#[derive(Subdiagnostic)]
1236#[note(resolve_found_an_item_configured_out)]
1237pub(crate) struct FoundItemConfigureOut {
1238 #[primary_span]
1239 pub(crate) span: Span,
1240}
1241
1242#[derive(Subdiagnostic)]
1243#[note(resolve_item_was_behind_feature)]
1244pub(crate) struct ItemWasBehindFeature {
1245 pub(crate) feature: Symbol,
1246 #[primary_span]
1247 pub(crate) span: Span,
1248}
1249
1250#[derive(Subdiagnostic)]
1251#[note(resolve_item_was_cfg_out)]
1252pub(crate) struct ItemWasCfgOut {
1253 #[primary_span]
1254 pub(crate) span: Span,
1255}
1256
1257#[derive(Diagnostic)]
1258#[diag(resolve_trait_impl_mismatch)]
1259pub(crate) struct TraitImplMismatch {
1260 #[primary_span]
1261 #[label]
1262 pub(crate) span: Span,
1263 pub(crate) name: Ident,
1264 pub(crate) kind: &'static str,
1265 pub(crate) trait_path: String,
1266 #[label(resolve_trait_impl_mismatch_label_item)]
1267 pub(crate) trait_item_span: Span,
1268}