summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_hir_analysis/src/errors.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_hir_analysis/src/errors.rs')
-rw-r--r--compiler/rustc_hir_analysis/src/errors.rs186
1 files changed, 183 insertions, 3 deletions
diff --git a/compiler/rustc_hir_analysis/src/errors.rs b/compiler/rustc_hir_analysis/src/errors.rs
index 0efe82b20..dd83b5b6f 100644
--- a/compiler/rustc_hir_analysis/src/errors.rs
+++ b/compiler/rustc_hir_analysis/src/errors.rs
@@ -96,7 +96,7 @@ pub struct CopyImplOnTypeWithDtor {
#[diag(hir_analysis_multiple_relaxed_default_bounds, code = "E0203")]
pub struct MultipleRelaxedDefaultBounds {
#[primary_span]
- pub span: Span,
+ pub spans: Vec<Span>,
}
#[derive(Diagnostic)]
@@ -226,7 +226,9 @@ impl<'a> IntoDiagnostic<'a> for MissingTypeParams {
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 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
@@ -466,6 +468,14 @@ pub(crate) struct VariancesOf {
}
#[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]
@@ -673,7 +683,6 @@ pub(crate) struct SIMDFFIHighlyExperimental {
}
#[derive(Diagnostic)]
-
pub enum ImplNotMarkedDefault {
#[diag(hir_analysis_impl_not_marked_default, code = "E0520")]
#[note]
@@ -1149,3 +1158,174 @@ pub struct ImplForTyRequires {
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>,
+}