• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use rustc_macros::{Diagnostic, Subdiagnostic};
2 use rustc_span::{
3     symbol::{Ident, Symbol},
4     Span,
5 };
6 
7 use crate::{late::PatternSource, Res};
8 
9 #[derive(Diagnostic)]
10 #[diag(resolve_parent_module_reset_for_binding, code = "E0637")]
11 pub(crate) struct ParentModuleResetForBinding;
12 
13 #[derive(Diagnostic)]
14 #[diag(resolve_ampersand_used_without_explicit_lifetime_name, code = "E0637")]
15 #[note]
16 pub(crate) struct AmpersandUsedWithoutExplicitLifetimeName(#[primary_span] pub(crate) Span);
17 
18 #[derive(Diagnostic)]
19 #[diag(resolve_underscore_lifetime_name_cannot_be_used_here, code = "E0637")]
20 #[note]
21 pub(crate) struct UnderscoreLifetimeNameCannotBeUsedHere(#[primary_span] pub(crate) Span);
22 
23 #[derive(Diagnostic)]
24 #[diag(resolve_crate_may_not_be_imported)]
25 pub(crate) struct CrateMayNotBeImported(#[primary_span] pub(crate) Span);
26 
27 #[derive(Diagnostic)]
28 #[diag(resolve_crate_root_imports_must_be_named_explicitly)]
29 pub(crate) struct CrateRootNamesMustBeNamedExplicitly(#[primary_span] pub(crate) Span);
30 
31 #[derive(Diagnostic)]
32 #[diag(resolve_crate_root_imports_must_be_named_explicitly)]
33 pub(crate) struct ResolutionError(#[primary_span] pub(crate) Span);
34 
35 #[derive(Diagnostic)]
36 #[diag(resolve_name_is_already_used_as_generic_parameter, code = "E0403")]
37 pub(crate) struct NameAlreadyUsedInParameterList {
38     #[primary_span]
39     #[label]
40     pub(crate) span: Span,
41     #[label(resolve_first_use_of_name)]
42     pub(crate) first_use_span: Span,
43     pub(crate) name: Symbol,
44 }
45 
46 #[derive(Diagnostic)]
47 #[diag(resolve_method_not_member_of_trait, code = "E0407")]
48 pub(crate) struct MethodNotMemberOfTrait {
49     #[primary_span]
50     #[label]
51     pub(crate) span: Span,
52     pub(crate) method: Ident,
53     pub(crate) trait_: String,
54     #[subdiagnostic]
55     pub(crate) sub: Option<AssociatedFnWithSimilarNameExists>,
56 }
57 
58 #[derive(Subdiagnostic)]
59 #[suggestion(
60     resolve_associated_fn_with_similar_name_exists,
61     code = "{candidate}",
62     applicability = "maybe-incorrect"
63 )]
64 pub(crate) struct AssociatedFnWithSimilarNameExists {
65     #[primary_span]
66     pub(crate) span: Span,
67     pub(crate) candidate: Symbol,
68 }
69 
70 #[derive(Diagnostic)]
71 #[diag(resolve_type_not_member_of_trait, code = "E0437")]
72 pub(crate) struct TypeNotMemberOfTrait {
73     #[primary_span]
74     #[label]
75     pub(crate) span: Span,
76     pub(crate) type_: Ident,
77     pub(crate) trait_: String,
78     #[subdiagnostic]
79     pub(crate) sub: Option<AssociatedTypeWithSimilarNameExists>,
80 }
81 
82 #[derive(Subdiagnostic)]
83 #[suggestion(
84     resolve_associated_type_with_similar_name_exists,
85     code = "{candidate}",
86     applicability = "maybe-incorrect"
87 )]
88 pub(crate) struct AssociatedTypeWithSimilarNameExists {
89     #[primary_span]
90     pub(crate) span: Span,
91     pub(crate) candidate: Symbol,
92 }
93 
94 #[derive(Diagnostic)]
95 #[diag(resolve_const_not_member_of_trait, code = "E0438")]
96 pub(crate) struct ConstNotMemberOfTrait {
97     #[primary_span]
98     #[label]
99     pub(crate) span: Span,
100     pub(crate) const_: Ident,
101     pub(crate) trait_: String,
102     #[subdiagnostic]
103     pub(crate) sub: Option<AssociatedConstWithSimilarNameExists>,
104 }
105 
106 #[derive(Subdiagnostic)]
107 #[suggestion(
108     resolve_associated_const_with_similar_name_exists,
109     code = "{candidate}",
110     applicability = "maybe-incorrect"
111 )]
112 pub(crate) struct AssociatedConstWithSimilarNameExists {
113     #[primary_span]
114     pub(crate) span: Span,
115     pub(crate) candidate: Symbol,
116 }
117 
118 #[derive(Diagnostic)]
119 #[diag(resolve_variable_bound_with_different_mode, code = "E0409")]
120 pub(crate) struct VariableBoundWithDifferentMode {
121     #[primary_span]
122     #[label]
123     pub(crate) span: Span,
124     #[label(resolve_first_binding_span)]
125     pub(crate) first_binding_span: Span,
126     pub(crate) variable_name: Symbol,
127 }
128 
129 #[derive(Diagnostic)]
130 #[diag(resolve_ident_bound_more_than_once_in_parameter_list, code = "E0415")]
131 pub(crate) struct IdentifierBoundMoreThanOnceInParameterList {
132     #[primary_span]
133     #[label]
134     pub(crate) span: Span,
135     pub(crate) identifier: Symbol,
136 }
137 
138 #[derive(Diagnostic)]
139 #[diag(resolve_ident_bound_more_than_once_in_same_pattern, code = "E0416")]
140 pub(crate) struct IdentifierBoundMoreThanOnceInSamePattern {
141     #[primary_span]
142     #[label]
143     pub(crate) span: Span,
144     pub(crate) identifier: Symbol,
145 }
146 
147 #[derive(Diagnostic)]
148 #[diag(resolve_undeclared_label, code = "E0426")]
149 pub(crate) struct UndeclaredLabel {
150     #[primary_span]
151     #[label]
152     pub(crate) span: Span,
153     pub(crate) name: Symbol,
154     #[subdiagnostic]
155     pub(crate) sub_reachable: Option<LabelWithSimilarNameReachable>,
156     #[subdiagnostic]
157     pub(crate) sub_reachable_suggestion: Option<TryUsingSimilarlyNamedLabel>,
158     #[subdiagnostic]
159     pub(crate) sub_unreachable: Option<UnreachableLabelWithSimilarNameExists>,
160 }
161 
162 #[derive(Subdiagnostic)]
163 #[label(resolve_label_with_similar_name_reachable)]
164 pub(crate) struct LabelWithSimilarNameReachable(#[primary_span] pub(crate) Span);
165 
166 #[derive(Subdiagnostic)]
167 #[suggestion(
168     resolve_try_using_similarly_named_label,
169     code = "{ident_name}",
170     applicability = "maybe-incorrect"
171 )]
172 pub(crate) struct TryUsingSimilarlyNamedLabel {
173     #[primary_span]
174     pub(crate) span: Span,
175     pub(crate) ident_name: Symbol,
176 }
177 
178 #[derive(Subdiagnostic)]
179 #[label(resolve_unreachable_label_with_similar_name_exists)]
180 pub(crate) struct UnreachableLabelWithSimilarNameExists {
181     #[primary_span]
182     pub(crate) ident_span: Span,
183 }
184 
185 #[derive(Diagnostic)]
186 #[diag(resolve_self_import_can_only_appear_once_in_the_list, code = "E0430")]
187 pub(crate) struct SelfImportCanOnlyAppearOnceInTheList {
188     #[primary_span]
189     #[label]
190     pub(crate) span: Span,
191 }
192 
193 #[derive(Diagnostic)]
194 #[diag(resolve_self_import_only_in_import_list_with_non_empty_prefix, code = "E0431")]
195 pub(crate) struct SelfImportOnlyInImportListWithNonEmptyPrefix {
196     #[primary_span]
197     #[label]
198     pub(crate) span: Span,
199 }
200 
201 #[derive(Diagnostic)]
202 #[diag(resolve_cannot_capture_dynamic_environment_in_fn_item, code = "E0434")]
203 #[help]
204 pub(crate) struct CannotCaptureDynamicEnvironmentInFnItem {
205     #[primary_span]
206     pub(crate) span: Span,
207 }
208 
209 #[derive(Diagnostic)]
210 #[diag(resolve_attempt_to_use_non_constant_value_in_constant, code = "E0435")]
211 pub(crate) struct AttemptToUseNonConstantValueInConstant<'a> {
212     #[primary_span]
213     pub(crate) span: Span,
214     #[subdiagnostic]
215     pub(crate) with: Option<AttemptToUseNonConstantValueInConstantWithSuggestion<'a>>,
216     #[subdiagnostic]
217     pub(crate) with_label: Option<AttemptToUseNonConstantValueInConstantLabelWithSuggestion>,
218     #[subdiagnostic]
219     pub(crate) without: Option<AttemptToUseNonConstantValueInConstantWithoutSuggestion<'a>>,
220 }
221 
222 #[derive(Subdiagnostic)]
223 #[suggestion(
224     resolve_attempt_to_use_non_constant_value_in_constant_with_suggestion,
225     code = "{suggestion} {ident}",
226     applicability = "maybe-incorrect"
227 )]
228 pub(crate) struct AttemptToUseNonConstantValueInConstantWithSuggestion<'a> {
229     #[primary_span]
230     pub(crate) span: Span,
231     pub(crate) ident: Ident,
232     pub(crate) suggestion: &'a str,
233     pub(crate) current: &'a str,
234 }
235 
236 #[derive(Subdiagnostic)]
237 #[label(resolve_attempt_to_use_non_constant_value_in_constant_label_with_suggestion)]
238 pub(crate) struct AttemptToUseNonConstantValueInConstantLabelWithSuggestion {
239     #[primary_span]
240     pub(crate) span: Span,
241 }
242 
243 #[derive(Subdiagnostic)]
244 #[label(resolve_attempt_to_use_non_constant_value_in_constant_without_suggestion)]
245 pub(crate) struct AttemptToUseNonConstantValueInConstantWithoutSuggestion<'a> {
246     #[primary_span]
247     pub(crate) ident_span: Span,
248     pub(crate) suggestion: &'a str,
249 }
250 
251 #[derive(Diagnostic)]
252 #[diag(resolve_self_imports_only_allowed_within, code = "E0429")]
253 pub(crate) struct SelfImportsOnlyAllowedWithin {
254     #[primary_span]
255     pub(crate) span: Span,
256     #[subdiagnostic]
257     pub(crate) suggestion: Option<SelfImportsOnlyAllowedWithinSuggestion>,
258     #[subdiagnostic]
259     pub(crate) mpart_suggestion: Option<SelfImportsOnlyAllowedWithinMultipartSuggestion>,
260 }
261 
262 #[derive(Subdiagnostic)]
263 #[suggestion(
264     resolve_self_imports_only_allowed_within_suggestion,
265     code = "",
266     applicability = "machine-applicable"
267 )]
268 pub(crate) struct SelfImportsOnlyAllowedWithinSuggestion {
269     #[primary_span]
270     pub(crate) span: Span,
271 }
272 
273 #[derive(Subdiagnostic)]
274 #[multipart_suggestion(
275     resolve_self_imports_only_allowed_within_multipart_suggestion,
276     applicability = "machine-applicable"
277 )]
278 pub(crate) struct SelfImportsOnlyAllowedWithinMultipartSuggestion {
279     #[suggestion_part(code = "{{")]
280     pub(crate) multipart_start: Span,
281     #[suggestion_part(code = "}}")]
282     pub(crate) multipart_end: Span,
283 }
284 
285 #[derive(Diagnostic)]
286 #[diag(resolve_binding_shadows_something_unacceptable, code = "E0530")]
287 pub(crate) struct BindingShadowsSomethingUnacceptable<'a> {
288     #[primary_span]
289     #[label]
290     pub(crate) span: Span,
291     pub(crate) shadowing_binding: PatternSource,
292     pub(crate) shadowed_binding: Res,
293     pub(crate) article: &'a str,
294     #[subdiagnostic]
295     pub(crate) sub_suggestion: Option<BindingShadowsSomethingUnacceptableSuggestion>,
296     #[label(resolve_label_shadowed_binding)]
297     pub(crate) shadowed_binding_span: Span,
298     pub(crate) participle: &'a str,
299     pub(crate) name: Symbol,
300 }
301 
302 #[derive(Subdiagnostic)]
303 #[suggestion(
304     resolve_binding_shadows_something_unacceptable_suggestion,
305     code = "{name}(..)",
306     applicability = "unspecified"
307 )]
308 pub(crate) struct BindingShadowsSomethingUnacceptableSuggestion {
309     #[primary_span]
310     pub(crate) span: Span,
311     pub(crate) name: Symbol,
312 }
313 
314 #[derive(Diagnostic)]
315 #[diag(resolve_forward_declared_generic_param, code = "E0128")]
316 pub(crate) struct ForwardDeclaredGenericParam {
317     #[primary_span]
318     #[label]
319     pub(crate) span: Span,
320 }
321 
322 #[derive(Diagnostic)]
323 #[diag(resolve_param_in_ty_of_const_param, code = "E0770")]
324 pub(crate) struct ParamInTyOfConstParam {
325     #[primary_span]
326     #[label]
327     pub(crate) span: Span,
328     pub(crate) name: Symbol,
329     #[subdiagnostic]
330     pub(crate) param_kind: Option<ParamKindInTyOfConstParam>,
331 }
332 
333 #[derive(Debug)]
334 #[derive(Subdiagnostic)]
335 pub(crate) enum ParamKindInTyOfConstParam {
336     #[note(resolve_type_param_in_ty_of_const_param)]
337     Type,
338     #[note(resolve_const_param_in_ty_of_const_param)]
339     Const,
340     #[note(resolve_lifetime_param_in_ty_of_const_param)]
341     Lifetime,
342 }
343 
344 #[derive(Diagnostic)]
345 #[diag(resolve_self_in_generic_param_default, code = "E0735")]
346 pub(crate) struct SelfInGenericParamDefault {
347     #[primary_span]
348     #[label]
349     pub(crate) span: Span,
350 }
351 
352 #[derive(Diagnostic)]
353 #[diag(resolve_param_in_non_trivial_anon_const)]
354 pub(crate) struct ParamInNonTrivialAnonConst {
355     #[primary_span]
356     #[label]
357     pub(crate) span: Span,
358     pub(crate) name: Symbol,
359     #[subdiagnostic]
360     pub(crate) param_kind: ParamKindInNonTrivialAnonConst,
361     #[subdiagnostic]
362     pub(crate) help: Option<ParamInNonTrivialAnonConstHelp>,
363 }
364 
365 #[derive(Subdiagnostic)]
366 #[help(resolve_param_in_non_trivial_anon_const_help)]
367 pub(crate) struct ParamInNonTrivialAnonConstHelp;
368 
369 #[derive(Debug)]
370 #[derive(Subdiagnostic)]
371 pub(crate) enum ParamKindInNonTrivialAnonConst {
372     #[note(resolve_type_param_in_non_trivial_anon_const)]
373     Type,
374     #[help(resolve_const_param_in_non_trivial_anon_const)]
375     Const { name: Symbol },
376     #[note(resolve_lifetime_param_in_non_trivial_anon_const)]
377     Lifetime,
378 }
379 
380 #[derive(Diagnostic)]
381 #[diag(resolve_unreachable_label, code = "E0767")]
382 #[note]
383 pub(crate) struct UnreachableLabel {
384     #[primary_span]
385     #[label]
386     pub(crate) span: Span,
387     pub(crate) name: Symbol,
388     #[label(resolve_label_definition_span)]
389     pub(crate) definition_span: Span,
390     #[subdiagnostic]
391     pub(crate) sub_suggestion: Option<UnreachableLabelSubSuggestion>,
392     #[subdiagnostic]
393     pub(crate) sub_suggestion_label: Option<UnreachableLabelSubLabel>,
394     #[subdiagnostic]
395     pub(crate) sub_unreachable_label: Option<UnreachableLabelSubLabelUnreachable>,
396 }
397 
398 #[derive(Subdiagnostic)]
399 #[suggestion(
400     resolve_unreachable_label_suggestion_use_similarly_named,
401     code = "{ident_name}",
402     applicability = "maybe-incorrect"
403 )]
404 pub(crate) struct UnreachableLabelSubSuggestion {
405     #[primary_span]
406     pub(crate) span: Span,
407     pub(crate) ident_name: Symbol,
408 }
409 
410 #[derive(Subdiagnostic)]
411 #[label(resolve_unreachable_label_similar_name_reachable)]
412 pub(crate) struct UnreachableLabelSubLabel {
413     #[primary_span]
414     pub(crate) ident_span: Span,
415 }
416 
417 #[derive(Subdiagnostic)]
418 #[label(resolve_unreachable_label_similar_name_unreachable)]
419 pub(crate) struct UnreachableLabelSubLabelUnreachable {
420     #[primary_span]
421     pub(crate) ident_span: Span,
422 }
423 
424 #[derive(Diagnostic)]
425 #[diag(resolve_trait_impl_mismatch, code = "{code}")]
426 pub(crate) struct TraitImplMismatch {
427     #[primary_span]
428     #[label]
429     pub(crate) span: Span,
430     pub(crate) name: Symbol,
431     pub(crate) kind: String,
432     #[label(resolve_label_trait_item)]
433     pub(crate) trait_item_span: Span,
434     pub(crate) trait_path: String,
435     pub(crate) code: String,
436 }
437 
438 #[derive(Diagnostic)]
439 #[diag(resolve_invalid_asm_sym)]
440 #[help]
441 pub(crate) struct InvalidAsmSym {
442     #[primary_span]
443     #[label]
444     pub(crate) span: Span,
445 }
446 
447 #[derive(Diagnostic)]
448 #[diag(resolve_lowercase_self)]
449 pub(crate) struct LowercaseSelf {
450     #[primary_span]
451     #[suggestion(code = "Self", applicability = "maybe-incorrect", style = "short")]
452     pub(crate) span: Span,
453 }
454 
455 #[derive(Diagnostic)]
456 #[diag(resolve_trait_impl_duplicate, code = "E0201")]
457 pub(crate) struct TraitImplDuplicate {
458     #[primary_span]
459     #[label]
460     pub(crate) span: Span,
461     #[label(resolve_old_span_label)]
462     pub(crate) old_span: Span,
463     #[label(resolve_trait_item_span)]
464     pub(crate) trait_item_span: Span,
465     pub(crate) name: Symbol,
466 }
467 
468 #[derive(Diagnostic)]
469 #[diag(resolve_relative_2018)]
470 pub(crate) struct Relative2018 {
471     #[primary_span]
472     pub(crate) span: Span,
473     #[suggestion(code = "crate::{path_str}", applicability = "maybe-incorrect")]
474     pub(crate) path_span: Span,
475     pub(crate) path_str: String,
476 }
477 
478 #[derive(Diagnostic)]
479 #[diag(resolve_ancestor_only, code = "E0742")]
480 pub(crate) struct AncestorOnly(#[primary_span] pub(crate) Span);
481 
482 #[derive(Diagnostic)]
483 #[diag(resolve_expected_found, code = "E0577")]
484 pub(crate) struct ExpectedFound {
485     #[primary_span]
486     #[label]
487     pub(crate) span: Span,
488     pub(crate) res: Res,
489     pub(crate) path_str: String,
490 }
491 
492 #[derive(Diagnostic)]
493 #[diag(resolve_indeterminate, code = "E0578")]
494 pub(crate) struct Indeterminate(#[primary_span] pub(crate) Span);
495 
496 #[derive(Diagnostic)]
497 #[diag(resolve_tool_module_imported)]
498 pub(crate) struct ToolModuleImported {
499     #[primary_span]
500     pub(crate) span: Span,
501     #[note]
502     pub(crate) import: Span,
503 }
504 
505 #[derive(Diagnostic)]
506 #[diag(resolve_module_only)]
507 pub(crate) struct ModuleOnly(#[primary_span] pub(crate) Span);
508 
509 #[derive(Diagnostic, Default)]
510 #[diag(resolve_macro_expected_found)]
511 pub(crate) struct MacroExpectedFound<'a> {
512     #[primary_span]
513     pub(crate) span: Span,
514     pub(crate) found: &'a str,
515     pub(crate) expected: &'a str,
516     pub(crate) macro_path: &'a str,
517     #[subdiagnostic]
518     pub(crate) remove_surrounding_derive: Option<RemoveSurroundingDerive>,
519     #[subdiagnostic]
520     pub(crate) add_as_non_derive: Option<AddAsNonDerive<'a>>,
521 }
522 
523 #[derive(Subdiagnostic)]
524 #[help(resolve_remove_surrounding_derive)]
525 pub(crate) struct RemoveSurroundingDerive {
526     #[primary_span]
527     pub(crate) span: Span,
528 }
529 
530 #[derive(Subdiagnostic)]
531 #[help(resolve_add_as_non_derive)]
532 pub(crate) struct AddAsNonDerive<'a> {
533     pub(crate) macro_path: &'a str,
534 }
535 
536 #[derive(Diagnostic)]
537 #[diag(resolve_proc_macro_same_crate)]
538 pub(crate) struct ProcMacroSameCrate {
539     #[primary_span]
540     pub(crate) span: Span,
541     #[help]
542     pub(crate) is_test: bool,
543 }
544 
545 #[derive(Diagnostic)]
546 #[diag(resolve_imported_crate)]
547 pub(crate) struct CrateImported {
548     #[primary_span]
549     pub(crate) span: Span,
550 }
551 
552 #[derive(Diagnostic)]
553 #[diag(resolve_macro_use_extern_crate_self)]
554 pub(crate) struct MacroUseExternCrateSelf {
555     #[primary_span]
556     pub(crate) span: Span,
557 }
558 
559 #[derive(Diagnostic)]
560 #[diag(resolve_accessible_unsure)]
561 #[note]
562 pub(crate) struct CfgAccessibleUnsure {
563     #[primary_span]
564     pub(crate) span: Span,
565 }
566 
567 #[derive(Debug)]
568 #[derive(Diagnostic)]
569 #[diag(resolve_param_in_enum_discriminant)]
570 pub(crate) struct ParamInEnumDiscriminant {
571     #[primary_span]
572     #[label]
573     pub(crate) span: Span,
574     pub(crate) name: Symbol,
575     #[subdiagnostic]
576     pub(crate) param_kind: ParamKindInEnumDiscriminant,
577 }
578 
579 #[derive(Debug)]
580 #[derive(Subdiagnostic)]
581 pub(crate) enum ParamKindInEnumDiscriminant {
582     #[note(resolve_type_param_in_enum_discriminant)]
583     Type,
584     #[note(resolve_const_param_in_enum_discriminant)]
585     Const,
586     #[note(resolve_lifetime_param_in_enum_discriminant)]
587     Lifetime,
588 }
589 
590 #[derive(Subdiagnostic)]
591 #[label(resolve_change_import_binding)]
592 pub(crate) struct ChangeImportBinding {
593     #[primary_span]
594     pub(crate) span: Span,
595 }
596 
597 #[derive(Subdiagnostic)]
598 #[suggestion(
599     resolve_change_import_binding,
600     code = "{suggestion}",
601     applicability = "maybe-incorrect"
602 )]
603 pub(crate) struct ChangeImportBindingSuggestion {
604     #[primary_span]
605     pub(crate) span: Span,
606     pub(crate) suggestion: String,
607 }
608 
609 #[derive(Diagnostic)]
610 #[diag(resolve_imports_cannot_refer_to)]
611 pub(crate) struct ImportsCannotReferTo<'a> {
612     #[primary_span]
613     pub(crate) span: Span,
614     pub(crate) what: &'a str,
615 }
616 
617 #[derive(Diagnostic)]
618 #[diag(resolve_cannot_find_ident_in_this_scope)]
619 pub(crate) struct CannotFindIdentInThisScope<'a> {
620     #[primary_span]
621     pub(crate) span: Span,
622     pub(crate) expected: &'a str,
623     pub(crate) ident: Ident,
624 }
625 
626 #[derive(Subdiagnostic)]
627 #[note(resolve_explicit_unsafe_traits)]
628 pub(crate) struct ExplicitUnsafeTraits {
629     #[primary_span]
630     pub(crate) span: Span,
631     pub(crate) ident: Ident,
632 }
633 
634 #[derive(Subdiagnostic)]
635 #[help(resolve_added_macro_use)]
636 pub(crate) struct AddedMacroUse;
637 
638 #[derive(Subdiagnostic)]
639 #[suggestion(
640     resolve_consider_adding_a_derive,
641     code = "{suggestion}",
642     applicability = "maybe-incorrect"
643 )]
644 pub(crate) struct ConsiderAddingADerive {
645     #[primary_span]
646     pub(crate) span: Span,
647     pub(crate) suggestion: String,
648 }
649 
650 #[derive(Diagnostic)]
651 #[diag(resolve_cannot_determine_import_resolution)]
652 pub(crate) struct CannotDetermineImportResolution {
653     #[primary_span]
654     pub(crate) span: Span,
655 }
656 
657 #[derive(Diagnostic)]
658 #[diag(resolve_cannot_be_reexported_private, code = "E0364")]
659 pub(crate) struct CannotBeReexportedPrivate {
660     #[primary_span]
661     pub(crate) span: Span,
662     pub(crate) ident: Ident,
663 }
664 
665 #[derive(Diagnostic)]
666 #[diag(resolve_cannot_be_reexported_crate_public, code = "E0364")]
667 pub(crate) struct CannotBeReexportedCratePublic {
668     #[primary_span]
669     pub(crate) span: Span,
670     pub(crate) ident: Ident,
671 }
672 
673 #[derive(Diagnostic)]
674 #[diag(resolve_cannot_be_reexported_private, code = "E0365")]
675 #[note(resolve_consider_declaring_with_pub)]
676 pub(crate) struct CannotBeReexportedPrivateNS {
677     #[primary_span]
678     #[label(resolve_reexport_of_private)]
679     pub(crate) span: Span,
680     pub(crate) ident: Ident,
681 }
682 
683 #[derive(Diagnostic)]
684 #[diag(resolve_cannot_be_reexported_crate_public, code = "E0365")]
685 #[note(resolve_consider_declaring_with_pub)]
686 pub(crate) struct CannotBeReexportedCratePublicNS {
687     #[primary_span]
688     #[label(resolve_reexport_of_crate_public)]
689     pub(crate) span: Span,
690     pub(crate) ident: Ident,
691 }
692 
693 #[derive(Subdiagnostic)]
694 #[help(resolve_consider_adding_macro_export)]
695 pub(crate) struct ConsiderAddingMacroExport {
696     #[primary_span]
697     pub(crate) span: Span,
698 }
699 
700 #[derive(Subdiagnostic)]
701 #[note(resolve_consider_marking_as_pub)]
702 pub(crate) struct ConsiderMarkingAsPub {
703     #[primary_span]
704     pub(crate) span: Span,
705     pub(crate) ident: Ident,
706 }
707 
708 #[derive(Diagnostic)]
709 #[diag(resolve_cannot_glob_import_possible_crates)]
710 pub(crate) struct CannotGlobImportAllCrates {
711     #[primary_span]
712     pub(crate) span: Span,
713 }
714 
715 #[derive(Diagnostic)]
716 #[diag(resolve_items_in_traits_are_not_importable)]
717 pub(crate) struct ItemsInTraitsAreNotImportable {
718     #[primary_span]
719     pub(crate) span: Span,
720 }
721 
722 #[derive(Diagnostic)]
723 #[diag(resolve_is_not_directly_importable, code = "E0253")]
724 pub(crate) struct IsNotDirectlyImportable {
725     #[primary_span]
726     #[label]
727     pub(crate) span: Span,
728     pub(crate) target: Ident,
729 }
730