| //! Errors emitted by `rustc_hir_analysis`. |
| |
| use crate::fluent_generated as fluent; |
| use rustc_errors::{ |
| codes::*, Applicability, Diag, DiagCtxt, Diagnostic, EmissionGuarantee, Level, MultiSpan, |
| }; |
| use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic}; |
| use rustc_middle::ty::Ty; |
| use rustc_span::{symbol::Ident, Span, Symbol}; |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_ambiguous_assoc_item)] |
| pub struct AmbiguousAssocItem<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub assoc_kind: &'static str, |
| pub assoc_name: Ident, |
| pub ty_param_name: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_assoc_kind_mismatch)] |
| pub struct AssocKindMismatch { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub expected: &'static str, |
| pub got: &'static str, |
| #[label(hir_analysis_expected_because_label)] |
| pub expected_because_label: Option<Span>, |
| pub assoc_kind: &'static str, |
| #[note] |
| pub def_span: Span, |
| #[label(hir_analysis_bound_on_assoc_const_label)] |
| pub bound_on_assoc_const_label: Option<Span>, |
| #[subdiagnostic] |
| pub wrap_in_braces_sugg: Option<AssocKindMismatchWrapInBracesSugg>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[multipart_suggestion( |
| hir_analysis_assoc_kind_mismatch_wrap_in_braces_sugg, |
| applicability = "maybe-incorrect" |
| )] |
| pub struct AssocKindMismatchWrapInBracesSugg { |
| #[suggestion_part(code = "{{ ")] |
| pub lo: Span, |
| #[suggestion_part(code = " }}")] |
| pub hi: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_assoc_item_not_found, code = E0220)] |
| pub struct AssocItemNotFound<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub assoc_name: Ident, |
| pub assoc_kind: &'static str, |
| pub ty_param_name: &'a str, |
| #[subdiagnostic] |
| pub label: Option<AssocItemNotFoundLabel<'a>>, |
| #[subdiagnostic] |
| pub sugg: Option<AssocItemNotFoundSugg<'a>>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| pub enum AssocItemNotFoundLabel<'a> { |
| #[label(hir_analysis_assoc_item_not_found_label)] |
| NotFound { |
| #[primary_span] |
| span: Span, |
| }, |
| #[label(hir_analysis_assoc_item_not_found_found_in_other_trait_label)] |
| FoundInOtherTrait { |
| #[primary_span] |
| span: Span, |
| assoc_kind: &'static str, |
| trait_name: &'a str, |
| suggested_name: Symbol, |
| identically_named: bool, |
| }, |
| } |
| |
| #[derive(Subdiagnostic)] |
| |
| pub enum AssocItemNotFoundSugg<'a> { |
| #[suggestion( |
| hir_analysis_assoc_item_not_found_similar_sugg, |
| code = "{suggested_name}", |
| applicability = "maybe-incorrect" |
| )] |
| Similar { |
| #[primary_span] |
| span: Span, |
| assoc_kind: &'static str, |
| suggested_name: Symbol, |
| }, |
| #[suggestion( |
| hir_analysis_assoc_item_not_found_similar_in_other_trait_sugg, |
| code = "{suggested_name}", |
| style = "verbose", |
| applicability = "maybe-incorrect" |
| )] |
| SimilarInOtherTrait { |
| #[primary_span] |
| span: Span, |
| assoc_kind: &'static str, |
| suggested_name: Symbol, |
| }, |
| #[suggestion(hir_analysis_assoc_item_not_found_other_sugg, code = "{suggested_name}")] |
| Other { |
| #[primary_span] |
| span: Span, |
| #[applicability] |
| applicability: Applicability, |
| ty_param_name: &'a str, |
| assoc_kind: &'static str, |
| suggested_name: Symbol, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_unrecognized_atomic_operation, code = E0092)] |
| pub struct UnrecognizedAtomicOperation<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub op: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_wrong_number_of_generic_arguments_to_intrinsic, code = E0094)] |
| pub struct WrongNumberOfGenericArgumentsToIntrinsic<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub found: usize, |
| pub expected: usize, |
| pub descr: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_unrecognized_intrinsic_function, code = E0093)] |
| #[help] |
| pub struct UnrecognizedIntrinsicFunction { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub name: Symbol, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_lifetimes_or_bounds_mismatch_on_trait, code = E0195)] |
| pub struct LifetimesOrBoundsMismatchOnTrait { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(hir_analysis_generics_label)] |
| pub generics_span: Option<Span>, |
| #[label(hir_analysis_where_label)] |
| pub where_span: Option<Span>, |
| #[label(hir_analysis_bounds_label)] |
| pub bounds_span: Vec<Span>, |
| pub item_kind: &'static str, |
| pub ident: Ident, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_drop_impl_on_wrong_item, code = E0120)] |
| pub struct DropImplOnWrongItem { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| pub enum FieldAlreadyDeclared { |
| #[diag(hir_analysis_field_already_declared, code = E0124)] |
| NotNested { |
| field_name: Symbol, |
| #[primary_span] |
| #[label] |
| span: Span, |
| #[label(hir_analysis_previous_decl_label)] |
| prev_span: Span, |
| }, |
| #[diag(hir_analysis_field_already_declared_current_nested)] |
| CurrentNested { |
| field_name: Symbol, |
| #[primary_span] |
| #[label] |
| span: Span, |
| #[note(hir_analysis_nested_field_decl_note)] |
| nested_field_span: Span, |
| #[subdiagnostic] |
| help: FieldAlreadyDeclaredNestedHelp, |
| #[label(hir_analysis_previous_decl_label)] |
| prev_span: Span, |
| }, |
| #[diag(hir_analysis_field_already_declared_previous_nested)] |
| PreviousNested { |
| field_name: Symbol, |
| #[primary_span] |
| #[label] |
| span: Span, |
| #[label(hir_analysis_previous_decl_label)] |
| prev_span: Span, |
| #[note(hir_analysis_previous_nested_field_decl_note)] |
| prev_nested_field_span: Span, |
| #[subdiagnostic] |
| prev_help: FieldAlreadyDeclaredNestedHelp, |
| }, |
| #[diag(hir_analysis_field_already_declared_both_nested)] |
| BothNested { |
| field_name: Symbol, |
| #[primary_span] |
| #[label] |
| span: Span, |
| #[note(hir_analysis_nested_field_decl_note)] |
| nested_field_span: Span, |
| #[subdiagnostic] |
| help: FieldAlreadyDeclaredNestedHelp, |
| #[label(hir_analysis_previous_decl_label)] |
| prev_span: Span, |
| #[note(hir_analysis_previous_nested_field_decl_note)] |
| prev_nested_field_span: Span, |
| #[subdiagnostic] |
| prev_help: FieldAlreadyDeclaredNestedHelp, |
| }, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[help(hir_analysis_field_already_declared_nested_help)] |
| pub struct FieldAlreadyDeclaredNestedHelp { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_copy_impl_on_type_with_dtor, code = E0184)] |
| pub struct CopyImplOnTypeWithDtor { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_multiple_relaxed_default_bounds, code = E0203)] |
| pub struct MultipleRelaxedDefaultBounds { |
| #[primary_span] |
| pub spans: Vec<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_copy_impl_on_non_adt, code = E0206)] |
| pub struct CopyImplOnNonAdt { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_const_param_ty_impl_on_non_adt)] |
| pub struct ConstParamTyImplOnNonAdt { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_trait_object_declared_with_no_traits, code = E0224)] |
| pub struct TraitObjectDeclaredWithNoTraits { |
| #[primary_span] |
| pub span: Span, |
| #[label(hir_analysis_alias_span)] |
| pub trait_alias_span: Option<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_ambiguous_lifetime_bound, code = E0227)] |
| pub struct AmbiguousLifetimeBound { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_assoc_type_binding_not_allowed, code = E0229)] |
| pub struct AssocTypeBindingNotAllowed { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| |
| #[subdiagnostic] |
| pub fn_trait_expansion: Option<ParenthesizedFnTraitExpansion>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[help(hir_analysis_parenthesized_fn_trait_expansion)] |
| pub struct ParenthesizedFnTraitExpansion { |
| #[primary_span] |
| pub span: Span, |
| |
| pub expanded_type: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_typeof_reserved_keyword_used, code = E0516)] |
| pub struct TypeofReservedKeywordUsed<'tcx> { |
| pub ty: Ty<'tcx>, |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[suggestion(style = "verbose", code = "{ty}")] |
| pub opt_sugg: Option<(Span, Applicability)>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_value_of_associated_struct_already_specified, code = E0719)] |
| pub struct ValueOfAssociatedStructAlreadySpecified { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(hir_analysis_previous_bound_label)] |
| pub prev_span: Span, |
| pub item_name: Ident, |
| pub def_path: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_unconstrained_opaque_type)] |
| #[note] |
| pub struct UnconstrainedOpaqueType { |
| #[primary_span] |
| pub span: Span, |
| pub name: Symbol, |
| pub what: &'static str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_tait_forward_compat)] |
| #[note] |
| pub struct TaitForwardCompat { |
| #[primary_span] |
| pub span: Span, |
| #[note] |
| pub item_span: Span, |
| } |
| |
| pub struct MissingTypeParams { |
| pub span: Span, |
| pub def_span: Span, |
| pub span_snippet: Option<String>, |
| pub missing_type_params: Vec<Symbol>, |
| pub empty_generic_args: bool, |
| } |
| |
| // Manual implementation of `Diagnostic` to be able to call `span_to_snippet`. |
| impl<'a, G: EmissionGuarantee> Diagnostic<'a, G> for MissingTypeParams { |
| #[track_caller] |
| fn into_diag(self, dcx: &'a DiagCtxt, level: Level) -> Diag<'a, G> { |
| let mut err = Diag::new(dcx, level, fluent::hir_analysis_missing_type_params); |
| err.span(self.span); |
| err.code(E0393); |
| err.arg("parameterCount", self.missing_type_params.len()); |
| err.arg( |
| "parameters", |
| self.missing_type_params |
| .iter() |
| .map(|n| format!("`{n}`")) |
| .collect::<Vec<_>>() |
| .join(", "), |
| ); |
| |
| err.span_label(self.def_span, fluent::hir_analysis_label); |
| |
| let mut suggested = false; |
| // Don't suggest setting the type params if there are some already: the order is |
| // tricky to get right and the user will already know what the syntax is. |
| if let Some(snippet) = self.span_snippet |
| && self.empty_generic_args |
| { |
| if snippet.ends_with('>') { |
| // The user wrote `Trait<'a, T>` or similar. To provide an accurate suggestion |
| // we would have to preserve the right order. For now, as clearly the user is |
| // aware of the syntax, we do nothing. |
| } else { |
| // The user wrote `Iterator`, so we don't have a type we can suggest, but at |
| // least we can clue them to the correct syntax `Iterator<Type>`. |
| err.span_suggestion( |
| self.span, |
| fluent::hir_analysis_suggestion, |
| format!( |
| "{}<{}>", |
| snippet, |
| self.missing_type_params |
| .iter() |
| .map(|n| n.to_string()) |
| .collect::<Vec<_>>() |
| .join(", ") |
| ), |
| Applicability::HasPlaceholders, |
| ); |
| suggested = true; |
| } |
| } |
| if !suggested { |
| err.span_label(self.span, fluent::hir_analysis_no_suggestion_label); |
| } |
| |
| err.note(fluent::hir_analysis_note); |
| err |
| } |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_manual_implementation, code = E0183)] |
| #[help] |
| pub struct ManualImplementation { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub trait_name: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_generic_args_on_overridden_impl)] |
| pub struct GenericArgsOnOverriddenImpl { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_const_impl_for_non_const_trait)] |
| pub struct ConstImplForNonConstTrait { |
| #[primary_span] |
| pub trait_ref_span: Span, |
| pub trait_name: String, |
| #[suggestion(applicability = "machine-applicable", code = "#[const_trait]")] |
| pub local_trait_span: Option<Span>, |
| #[note] |
| pub marking: (), |
| #[note(hir_analysis_adding)] |
| pub adding: (), |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_const_bound_for_non_const_trait)] |
| pub struct ConstBoundForNonConstTrait { |
| #[primary_span] |
| pub span: Span, |
| pub modifier: &'static str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_self_in_impl_self)] |
| pub struct SelfInImplSelf { |
| #[primary_span] |
| pub span: MultiSpan, |
| #[note] |
| pub note: (), |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_linkage_type, code = E0791)] |
| pub(crate) struct LinkageType { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[help] |
| #[diag(hir_analysis_auto_deref_reached_recursion_limit, code = E0055)] |
| pub struct AutoDerefReachedRecursionLimit<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub ty: Ty<'a>, |
| pub suggested_limit: rustc_session::Limit, |
| pub crate_name: Symbol, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_where_clause_on_main, code = E0646)] |
| pub(crate) struct WhereClauseOnMain { |
| #[primary_span] |
| pub span: Span, |
| #[label] |
| pub generics_span: Option<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_track_caller_on_main)] |
| pub(crate) struct TrackCallerOnMain { |
| #[primary_span] |
| #[suggestion(applicability = "maybe-incorrect", code = "")] |
| pub span: Span, |
| #[label(hir_analysis_track_caller_on_main)] |
| pub annotated: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_target_feature_on_main)] |
| pub(crate) struct TargetFeatureOnMain { |
| #[primary_span] |
| #[label(hir_analysis_target_feature_on_main)] |
| pub main: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_start_not_track_caller)] |
| pub(crate) struct StartTrackCaller { |
| #[primary_span] |
| pub span: Span, |
| #[label] |
| pub start: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_start_not_target_feature)] |
| pub(crate) struct StartTargetFeature { |
| #[primary_span] |
| pub span: Span, |
| #[label] |
| pub start: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_start_not_async, code = E0752)] |
| pub(crate) struct StartAsync { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_start_function_where, code = E0647)] |
| pub(crate) struct StartFunctionWhere { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_start_function_parameters, code = E0132)] |
| pub(crate) struct StartFunctionParameters { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_main_function_return_type_generic, code = E0131)] |
| pub(crate) struct MainFunctionReturnTypeGeneric { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_main_function_async, code = E0752)] |
| pub(crate) struct MainFunctionAsync { |
| #[primary_span] |
| pub span: Span, |
| #[label] |
| pub asyncness: Option<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_main_function_generic_parameters, code = E0131)] |
| pub(crate) struct MainFunctionGenericParameters { |
| #[primary_span] |
| pub span: Span, |
| #[label] |
| pub label_span: Option<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_variadic_function_compatible_convention, code = E0045)] |
| pub(crate) struct VariadicFunctionCompatibleConvention<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub conventions: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| pub(crate) enum CannotCaptureLateBound { |
| #[diag(hir_analysis_cannot_capture_late_bound_ty)] |
| Type { |
| #[primary_span] |
| use_span: Span, |
| #[label] |
| def_span: Span, |
| what: &'static str, |
| }, |
| #[diag(hir_analysis_cannot_capture_late_bound_const)] |
| Const { |
| #[primary_span] |
| use_span: Span, |
| #[label] |
| def_span: Span, |
| what: &'static str, |
| }, |
| #[diag(hir_analysis_cannot_capture_late_bound_lifetime)] |
| Lifetime { |
| #[primary_span] |
| use_span: Span, |
| #[label] |
| def_span: Span, |
| what: &'static str, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_variances_of)] |
| pub(crate) struct VariancesOf { |
| #[primary_span] |
| pub span: Span, |
| pub variances_of: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_type_of)] |
| pub(crate) struct TypeOf<'tcx> { |
| #[primary_span] |
| pub span: Span, |
| pub type_of: Ty<'tcx>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_pass_to_variadic_function, code = E0617)] |
| pub(crate) struct PassToVariadicFunction<'tcx, 'a> { |
| #[primary_span] |
| pub span: Span, |
| pub ty: Ty<'tcx>, |
| pub cast_ty: &'a str, |
| #[suggestion(code = "{replace}", applicability = "machine-applicable")] |
| pub sugg_span: Option<Span>, |
| pub replace: String, |
| #[help] |
| pub help: Option<()>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_cast_thin_pointer_to_fat_pointer, code = E0607)] |
| pub(crate) struct CastThinPointerToFatPointer<'tcx> { |
| #[primary_span] |
| pub span: Span, |
| pub expr_ty: Ty<'tcx>, |
| pub cast_ty: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_invalid_union_field, code = E0740)] |
| pub(crate) struct InvalidUnionField { |
| #[primary_span] |
| pub field_span: Span, |
| #[subdiagnostic] |
| pub sugg: InvalidUnionFieldSuggestion, |
| #[note] |
| pub note: (), |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_invalid_unnamed_field_ty)] |
| pub struct InvalidUnnamedFieldTy { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_return_type_notation_on_non_rpitit)] |
| pub(crate) struct ReturnTypeNotationOnNonRpitit<'tcx> { |
| #[primary_span] |
| pub span: Span, |
| pub ty: Ty<'tcx>, |
| #[label] |
| pub fn_span: Option<Span>, |
| #[note] |
| pub note: (), |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[multipart_suggestion(hir_analysis_invalid_union_field_sugg, applicability = "machine-applicable")] |
| pub(crate) struct InvalidUnionFieldSuggestion { |
| #[suggestion_part(code = "std::mem::ManuallyDrop<")] |
| pub lo: Span, |
| #[suggestion_part(code = ">")] |
| pub hi: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_return_type_notation_equality_bound)] |
| pub(crate) struct ReturnTypeNotationEqualityBound { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_placeholder_not_allowed_item_signatures, code = E0121)] |
| pub(crate) struct PlaceholderNotAllowedItemSignatures { |
| #[primary_span] |
| #[label] |
| pub spans: Vec<Span>, |
| pub kind: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_associated_type_trait_uninferred_generic_params, code = E0212)] |
| pub(crate) struct AssociatedTypeTraitUninferredGenericParams { |
| #[primary_span] |
| pub span: Span, |
| #[suggestion(style = "verbose", applicability = "maybe-incorrect", code = "{bound}")] |
| pub inferred_sugg: Option<Span>, |
| pub bound: String, |
| #[subdiagnostic] |
| pub mpart_sugg: Option<AssociatedTypeTraitUninferredGenericParamsMultipartSuggestion>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[multipart_suggestion( |
| hir_analysis_associated_type_trait_uninferred_generic_params_multipart_suggestion, |
| applicability = "maybe-incorrect" |
| )] |
| pub(crate) struct AssociatedTypeTraitUninferredGenericParamsMultipartSuggestion { |
| #[suggestion_part(code = "{first}")] |
| pub fspan: Span, |
| pub first: String, |
| #[suggestion_part(code = "{second}")] |
| pub sspan: Span, |
| pub second: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_enum_discriminant_overflowed, code = E0370)] |
| #[note] |
| pub(crate) struct EnumDiscriminantOverflowed { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub discr: String, |
| pub item_name: Symbol, |
| pub wrapped_discr: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_paren_sugar_attribute)] |
| #[help] |
| pub(crate) struct ParenSugarAttribute { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_must_implement_one_of_attribute)] |
| pub(crate) struct MustImplementOneOfAttribute { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_must_be_name_of_associated_function)] |
| pub(crate) struct MustBeNameOfAssociatedFunction { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_function_not_have_default_implementation)] |
| pub(crate) struct FunctionNotHaveDefaultImplementation { |
| #[primary_span] |
| pub span: Span, |
| #[note] |
| pub note_span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_must_implement_not_function)] |
| pub(crate) struct MustImplementNotFunction { |
| #[primary_span] |
| pub span: Span, |
| #[subdiagnostic] |
| pub span_note: MustImplementNotFunctionSpanNote, |
| #[subdiagnostic] |
| pub note: MustImplementNotFunctionNote, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[note(hir_analysis_must_implement_not_function_span_note)] |
| pub(crate) struct MustImplementNotFunctionSpanNote { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[note(hir_analysis_must_implement_not_function_note)] |
| pub(crate) struct MustImplementNotFunctionNote {} |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_function_not_found_in_trait)] |
| pub(crate) struct FunctionNotFoundInTrait { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_functions_names_duplicated)] |
| #[note] |
| pub(crate) struct FunctionNamesDuplicated { |
| #[primary_span] |
| pub spans: Vec<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_simd_ffi_highly_experimental)] |
| #[help] |
| pub(crate) struct SIMDFFIHighlyExperimental { |
| #[primary_span] |
| pub span: Span, |
| pub snip: String, |
| } |
| |
| #[derive(Diagnostic)] |
| pub enum ImplNotMarkedDefault { |
| #[diag(hir_analysis_impl_not_marked_default, code = E0520)] |
| #[note] |
| Ok { |
| #[primary_span] |
| #[label] |
| span: Span, |
| #[label(hir_analysis_ok_label)] |
| ok_label: Span, |
| ident: Symbol, |
| }, |
| #[diag(hir_analysis_impl_not_marked_default_err, code = E0520)] |
| #[note] |
| Err { |
| #[primary_span] |
| span: Span, |
| cname: Symbol, |
| ident: Symbol, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_missing_trait_item, code = E0046)] |
| pub(crate) struct MissingTraitItem { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[subdiagnostic] |
| pub missing_trait_item_label: Vec<MissingTraitItemLabel>, |
| #[subdiagnostic] |
| pub missing_trait_item: Vec<MissingTraitItemSuggestion>, |
| #[subdiagnostic] |
| pub missing_trait_item_none: Vec<MissingTraitItemSuggestionNone>, |
| pub missing_items_msg: String, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[label(hir_analysis_missing_trait_item_label)] |
| pub(crate) struct MissingTraitItemLabel { |
| #[primary_span] |
| pub span: Span, |
| pub item: Symbol, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[suggestion( |
| hir_analysis_missing_trait_item_suggestion, |
| style = "tool-only", |
| applicability = "has-placeholders", |
| code = "{code}" |
| )] |
| pub(crate) struct MissingTraitItemSuggestion { |
| #[primary_span] |
| pub span: Span, |
| pub code: String, |
| pub snippet: String, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[suggestion( |
| hir_analysis_missing_trait_item_suggestion, |
| style = "hidden", |
| applicability = "has-placeholders", |
| code = "{code}" |
| )] |
| pub(crate) struct MissingTraitItemSuggestionNone { |
| #[primary_span] |
| pub span: Span, |
| pub code: String, |
| pub snippet: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_missing_one_of_trait_item, code = E0046)] |
| pub(crate) struct MissingOneOfTraitItem { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[note] |
| pub note: Option<Span>, |
| pub missing_items_msg: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_missing_trait_item_unstable, code = E0046)] |
| #[note] |
| pub(crate) struct MissingTraitItemUnstable { |
| #[primary_span] |
| pub span: Span, |
| #[note(hir_analysis_some_note)] |
| pub some_note: bool, |
| #[note(hir_analysis_none_note)] |
| pub none_note: bool, |
| pub missing_item_name: Symbol, |
| pub feature: Symbol, |
| pub reason: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_transparent_enum_variant, code = E0731)] |
| pub(crate) struct TransparentEnumVariant { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(hir_analysis_multi_label)] |
| pub spans: Vec<Span>, |
| #[label(hir_analysis_many_label)] |
| pub many: Option<Span>, |
| pub number: usize, |
| pub path: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_transparent_non_zero_sized_enum, code = E0690)] |
| pub(crate) struct TransparentNonZeroSizedEnum<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(hir_analysis_labels)] |
| pub spans: Vec<Span>, |
| pub field_count: usize, |
| pub desc: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_transparent_non_zero_sized, code = E0690)] |
| pub(crate) struct TransparentNonZeroSized<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[label(hir_analysis_labels)] |
| pub spans: Vec<Span>, |
| pub field_count: usize, |
| pub desc: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_too_large_static)] |
| pub(crate) struct TooLargeStatic { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_specialization_trait)] |
| #[help] |
| pub(crate) struct SpecializationTrait { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_closure_implicit_hrtb)] |
| pub(crate) struct ClosureImplicitHrtb { |
| #[primary_span] |
| pub spans: Vec<Span>, |
| #[label] |
| pub for_sp: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_empty_specialization)] |
| pub(crate) struct EmptySpecialization { |
| #[primary_span] |
| pub span: Span, |
| #[note] |
| pub base_impl_span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_const_specialize)] |
| pub(crate) struct ConstSpecialize { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_static_specialize)] |
| pub(crate) struct StaticSpecialize { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| pub(crate) enum DropImplPolarity { |
| #[diag(hir_analysis_drop_impl_negative)] |
| Negative { |
| #[primary_span] |
| span: Span, |
| }, |
| #[diag(hir_analysis_drop_impl_reservation)] |
| Reservation { |
| #[primary_span] |
| span: Span, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| pub(crate) enum ReturnTypeNotationIllegalParam { |
| #[diag(hir_analysis_return_type_notation_illegal_param_type)] |
| Type { |
| #[primary_span] |
| span: Span, |
| #[label] |
| param_span: Span, |
| }, |
| #[diag(hir_analysis_return_type_notation_illegal_param_const)] |
| Const { |
| #[primary_span] |
| span: Span, |
| #[label] |
| param_span: Span, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| pub(crate) enum LateBoundInApit { |
| #[diag(hir_analysis_late_bound_type_in_apit)] |
| Type { |
| #[primary_span] |
| span: Span, |
| #[label] |
| param_span: Span, |
| }, |
| #[diag(hir_analysis_late_bound_const_in_apit)] |
| Const { |
| #[primary_span] |
| span: Span, |
| #[label] |
| param_span: Span, |
| }, |
| #[diag(hir_analysis_late_bound_lifetime_in_apit)] |
| Lifetime { |
| #[primary_span] |
| span: Span, |
| #[label] |
| param_span: Span, |
| }, |
| } |
| |
| #[derive(LintDiagnostic)] |
| #[diag(hir_analysis_unused_associated_type_bounds)] |
| #[note] |
| pub struct UnusedAssociatedTypeBounds { |
| #[suggestion(code = "")] |
| pub span: Span, |
| } |
| |
| #[derive(LintDiagnostic)] |
| #[diag(hir_analysis_rpitit_refined)] |
| #[note] |
| pub(crate) struct ReturnPositionImplTraitInTraitRefined<'tcx> { |
| #[suggestion(applicability = "maybe-incorrect", code = "{pre}{return_ty}{post}")] |
| pub impl_return_span: Span, |
| #[label] |
| pub trait_return_span: Option<Span>, |
| #[label(hir_analysis_unmatched_bound_label)] |
| pub unmatched_bound: Option<Span>, |
| |
| pub pre: &'static str, |
| pub post: &'static str, |
| pub return_ty: Ty<'tcx>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_inherent_ty_outside, code = E0390)] |
| #[help] |
| pub struct InherentTyOutside { |
| #[primary_span] |
| #[help(hir_analysis_span_help)] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_coerce_unsized_may, code = E0378)] |
| pub struct DispatchFromDynCoercion<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub trait_name: &'a str, |
| #[note(hir_analysis_coercion_between_struct_same_note)] |
| pub note: bool, |
| pub source_path: String, |
| pub target_path: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_dispatch_from_dyn_repr, code = E0378)] |
| pub struct DispatchFromDynRepr { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_inherent_ty_outside_relevant, code = E0390)] |
| #[help] |
| pub struct InherentTyOutsideRelevant { |
| #[primary_span] |
| pub span: Span, |
| #[help(hir_analysis_span_help)] |
| pub help_span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_inherent_ty_outside_new, code = E0116)] |
| #[note] |
| pub struct InherentTyOutsideNew { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_inherent_ty_outside_primitive, code = E0390)] |
| #[help] |
| pub struct InherentTyOutsidePrimitive { |
| #[primary_span] |
| pub span: Span, |
| #[help(hir_analysis_span_help)] |
| pub help_span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_inherent_primitive_ty, code = E0390)] |
| #[help] |
| pub struct InherentPrimitiveTy<'a> { |
| #[primary_span] |
| pub span: Span, |
| #[subdiagnostic] |
| pub note: Option<InherentPrimitiveTyNote<'a>>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[note(hir_analysis_inherent_primitive_ty_note)] |
| pub struct InherentPrimitiveTyNote<'a> { |
| pub subty: Ty<'a>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_inherent_dyn, code = E0785)] |
| #[note] |
| pub struct InherentDyn { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_inherent_nominal, code = E0118)] |
| #[note] |
| pub struct InherentNominal { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_dispatch_from_dyn_zst, code = E0378)] |
| #[note] |
| pub struct DispatchFromDynZST<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub name: Symbol, |
| pub ty: Ty<'a>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_coerce_unsized_may, code = E0378)] |
| pub struct DispatchFromDynSingle<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub trait_name: &'a str, |
| #[note(hir_analysis_coercion_between_struct_single_note)] |
| pub note: bool, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_dispatch_from_dyn_multi, code = E0378)] |
| #[note] |
| pub struct DispatchFromDynMulti { |
| #[primary_span] |
| pub span: Span, |
| #[note(hir_analysis_coercions_note)] |
| pub coercions_note: bool, |
| pub number: usize, |
| pub coercions: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_coerce_unsized_may, code = E0376)] |
| pub struct DispatchFromDynStruct<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub trait_name: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_coerce_unsized_may, code = E0377)] |
| pub struct DispatchFromDynSame<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub trait_name: &'a str, |
| #[note(hir_analysis_coercion_between_struct_same_note)] |
| pub note: bool, |
| pub source_path: String, |
| pub target_path: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_coerce_unsized_may, code = E0374)] |
| pub struct CoerceUnsizedOneField<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub trait_name: &'a str, |
| #[note(hir_analysis_coercion_between_struct_single_note)] |
| pub note: bool, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_coerce_unsized_multi, code = E0375)] |
| #[note] |
| pub struct CoerceUnsizedMulti { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[note(hir_analysis_coercions_note)] |
| pub coercions_note: bool, |
| pub number: usize, |
| pub coercions: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_coerce_unsized_may, code = E0378)] |
| pub struct CoerceUnsizedMay<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub trait_name: &'a str, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_trait_cannot_impl_for_ty, code = E0204)] |
| pub struct TraitCannotImplForTy { |
| #[primary_span] |
| pub span: Span, |
| pub trait_name: String, |
| #[label] |
| pub label_spans: Vec<Span>, |
| #[subdiagnostic] |
| pub notes: Vec<ImplForTyRequires>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[note(hir_analysis_requires_note)] |
| pub struct ImplForTyRequires { |
| #[primary_span] |
| pub span: MultiSpan, |
| pub error_predicate: String, |
| pub trait_name: String, |
| pub ty: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_traits_with_defualt_impl, code = E0321)] |
| #[note] |
| pub struct TraitsWithDefaultImpl<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub traits: String, |
| pub problematic_kind: &'a str, |
| pub self_ty: Ty<'a>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_cross_crate_traits, code = E0321)] |
| pub struct CrossCrateTraits<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub traits: String, |
| pub self_ty: Ty<'a>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_cross_crate_traits_defined, code = E0321)] |
| pub struct CrossCrateTraitsDefined { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub traits: String, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_ty_param_first_local, code = E0210)] |
| #[note] |
| pub struct TyParamFirstLocal<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[note(hir_analysis_case_note)] |
| pub note: (), |
| pub param_ty: Ty<'a>, |
| pub local_type: Ty<'a>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_ty_param_some, code = E0210)] |
| #[note] |
| pub struct TyParamSome<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[note(hir_analysis_only_note)] |
| pub note: (), |
| pub param_ty: Ty<'a>, |
| } |
| |
| #[derive(Diagnostic)] |
| pub enum OnlyCurrentTraits<'a> { |
| #[diag(hir_analysis_only_current_traits_outside, code = E0117)] |
| Outside { |
| #[primary_span] |
| #[label(hir_analysis_only_current_traits_label)] |
| span: Span, |
| #[note(hir_analysis_only_current_traits_note)] |
| note: (), |
| #[subdiagnostic] |
| opaque: Vec<OnlyCurrentTraitsOpaque>, |
| #[subdiagnostic] |
| foreign: Vec<OnlyCurrentTraitsForeign>, |
| #[subdiagnostic] |
| name: Vec<OnlyCurrentTraitsName<'a>>, |
| #[subdiagnostic] |
| pointer: Vec<OnlyCurrentTraitsPointer<'a>>, |
| #[subdiagnostic] |
| ty: Vec<OnlyCurrentTraitsTy<'a>>, |
| #[subdiagnostic] |
| sugg: Option<OnlyCurrentTraitsPointerSugg<'a>>, |
| }, |
| #[diag(hir_analysis_only_current_traits_primitive, code = E0117)] |
| Primitive { |
| #[primary_span] |
| #[label(hir_analysis_only_current_traits_label)] |
| span: Span, |
| #[note(hir_analysis_only_current_traits_note)] |
| note: (), |
| #[subdiagnostic] |
| opaque: Vec<OnlyCurrentTraitsOpaque>, |
| #[subdiagnostic] |
| foreign: Vec<OnlyCurrentTraitsForeign>, |
| #[subdiagnostic] |
| name: Vec<OnlyCurrentTraitsName<'a>>, |
| #[subdiagnostic] |
| pointer: Vec<OnlyCurrentTraitsPointer<'a>>, |
| #[subdiagnostic] |
| ty: Vec<OnlyCurrentTraitsTy<'a>>, |
| #[subdiagnostic] |
| sugg: Option<OnlyCurrentTraitsPointerSugg<'a>>, |
| }, |
| #[diag(hir_analysis_only_current_traits_arbitrary, code = E0117)] |
| Arbitrary { |
| #[primary_span] |
| #[label(hir_analysis_only_current_traits_label)] |
| span: Span, |
| #[note(hir_analysis_only_current_traits_note)] |
| note: (), |
| #[subdiagnostic] |
| opaque: Vec<OnlyCurrentTraitsOpaque>, |
| #[subdiagnostic] |
| foreign: Vec<OnlyCurrentTraitsForeign>, |
| #[subdiagnostic] |
| name: Vec<OnlyCurrentTraitsName<'a>>, |
| #[subdiagnostic] |
| pointer: Vec<OnlyCurrentTraitsPointer<'a>>, |
| #[subdiagnostic] |
| ty: Vec<OnlyCurrentTraitsTy<'a>>, |
| #[subdiagnostic] |
| sugg: Option<OnlyCurrentTraitsPointerSugg<'a>>, |
| }, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[label(hir_analysis_only_current_traits_opaque)] |
| pub struct OnlyCurrentTraitsOpaque { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[label(hir_analysis_only_current_traits_foreign)] |
| pub struct OnlyCurrentTraitsForeign { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[label(hir_analysis_only_current_traits_name)] |
| pub struct OnlyCurrentTraitsName<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub name: &'a str, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[label(hir_analysis_only_current_traits_pointer)] |
| pub struct OnlyCurrentTraitsPointer<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub pointer: Ty<'a>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[label(hir_analysis_only_current_traits_ty)] |
| pub struct OnlyCurrentTraitsTy<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub ty: Ty<'a>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[multipart_suggestion( |
| hir_analysis_only_current_traits_pointer_sugg, |
| applicability = "maybe-incorrect" |
| )] |
| pub struct OnlyCurrentTraitsPointerSugg<'a> { |
| #[suggestion_part(code = "WrapperType")] |
| pub wrapper_span: Span, |
| #[suggestion_part(code = "struct WrapperType(*{mut_key}{ptr_ty});\n\n")] |
| pub struct_span: Span, |
| pub mut_key: &'a str, |
| pub ptr_ty: Ty<'a>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_static_mut_ref, code = E0796)] |
| #[note] |
| pub struct StaticMutRef<'a> { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| #[subdiagnostic] |
| pub sugg: StaticMutRefSugg, |
| pub shared: &'a str, |
| } |
| |
| #[derive(Subdiagnostic)] |
| pub enum StaticMutRefSugg { |
| #[suggestion( |
| hir_analysis_suggestion, |
| style = "verbose", |
| code = "addr_of!({var})", |
| applicability = "maybe-incorrect" |
| )] |
| Shared { |
| #[primary_span] |
| span: Span, |
| var: String, |
| }, |
| #[suggestion( |
| hir_analysis_suggestion_mut, |
| style = "verbose", |
| code = "addr_of_mut!({var})", |
| applicability = "maybe-incorrect" |
| )] |
| Mut { |
| #[primary_span] |
| span: Span, |
| var: String, |
| }, |
| } |
| |
| // STATIC_MUT_REF lint |
| #[derive(LintDiagnostic)] |
| #[diag(hir_analysis_static_mut_refs_lint)] |
| #[note] |
| #[note(hir_analysis_why_note)] |
| pub struct RefOfMutStatic<'a> { |
| #[label] |
| pub span: Span, |
| #[subdiagnostic] |
| pub sugg: RefOfMutStaticSugg, |
| pub shared: &'a str, |
| } |
| |
| #[derive(Subdiagnostic)] |
| pub enum RefOfMutStaticSugg { |
| #[suggestion( |
| hir_analysis_suggestion, |
| style = "verbose", |
| code = "addr_of!({var})", |
| applicability = "maybe-incorrect" |
| )] |
| Shared { |
| #[primary_span] |
| span: Span, |
| var: String, |
| }, |
| #[suggestion( |
| hir_analysis_suggestion_mut, |
| style = "verbose", |
| code = "addr_of_mut!({var})", |
| applicability = "maybe-incorrect" |
| )] |
| Mut { |
| #[primary_span] |
| span: Span, |
| var: String, |
| }, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_not_supported_delegation)] |
| pub struct NotSupportedDelegation<'a> { |
| #[primary_span] |
| pub span: Span, |
| pub descr: &'a str, |
| #[label] |
| pub callee_span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_method_should_return_future)] |
| pub struct MethodShouldReturnFuture { |
| #[primary_span] |
| pub span: Span, |
| pub method_name: Symbol, |
| #[note] |
| pub trait_item_span: Option<Span>, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_unused_generic_parameter)] |
| pub(crate) struct UnusedGenericParameter { |
| #[primary_span] |
| #[label] |
| pub span: Span, |
| pub param_name: Ident, |
| pub param_def_kind: &'static str, |
| #[subdiagnostic] |
| pub help: UnusedGenericParameterHelp, |
| #[help(hir_analysis_const_param_help)] |
| pub const_param_help: Option<()>, |
| } |
| |
| #[derive(Subdiagnostic)] |
| pub(crate) enum UnusedGenericParameterHelp { |
| #[help(hir_analysis_unused_generic_parameter_adt_help)] |
| Adt { param_name: Ident, phantom_data: String }, |
| #[help(hir_analysis_unused_generic_parameter_adt_no_phantom_data_help)] |
| AdtNoPhantomData { param_name: Ident }, |
| #[help(hir_analysis_unused_generic_parameter_ty_alias_help)] |
| TyAlias { param_name: Ident }, |
| } |
| |
| #[derive(Diagnostic)] |
| pub enum UnnamedFieldsRepr<'a> { |
| #[diag(hir_analysis_unnamed_fields_repr_missing_repr_c)] |
| MissingReprC { |
| #[primary_span] |
| #[label] |
| span: Span, |
| adt_kind: &'static str, |
| adt_name: Symbol, |
| #[subdiagnostic] |
| unnamed_fields: Vec<UnnamedFieldsReprFieldDefined>, |
| #[suggestion(code = "#[repr(C)]\n")] |
| sugg_span: Span, |
| }, |
| #[diag(hir_analysis_unnamed_fields_repr_field_missing_repr_c)] |
| FieldMissingReprC { |
| #[primary_span] |
| #[label] |
| span: Span, |
| #[label(hir_analysis_field_ty_label)] |
| field_ty_span: Span, |
| field_ty: Ty<'a>, |
| field_adt_kind: &'static str, |
| #[suggestion(code = "#[repr(C)]\n")] |
| sugg_span: Span, |
| }, |
| } |
| |
| #[derive(Subdiagnostic)] |
| #[note(hir_analysis_unnamed_fields_repr_field_defined)] |
| pub struct UnnamedFieldsReprFieldDefined { |
| #[primary_span] |
| pub span: Span, |
| } |
| |
| #[derive(Diagnostic)] |
| #[diag(hir_analysis_opaque_captures_higher_ranked_lifetime, code = E0657)] |
| pub struct OpaqueCapturesHigherRankedLifetime { |
| #[primary_span] |
| pub span: Span, |
| #[label] |
| pub label: Option<Span>, |
| #[note] |
| pub decl_span: Span, |
| pub bad_place: &'static str, |
| } |