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