Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/diagnostics.rs')
-rw-r--r--crates/hir/src/diagnostics.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs
index 2d2883eb60..77f227b841 100644
--- a/crates/hir/src/diagnostics.rs
+++ b/crates/hir/src/diagnostics.rs
@@ -174,6 +174,9 @@ diagnostics![AnyDiagnostic<'db> ->
ElidedLifetimesInPath,
TypeMustBeKnown<'db>,
UnionExprMustHaveExactlyOneField,
+ UnionPatMustHaveExactlyOneField,
+ UnionPatHasRest,
+ RecordPatMissingFields,
UnimplementedTrait<'db>,
];
@@ -626,6 +629,22 @@ pub struct UnionExprMustHaveExactlyOneField {
}
#[derive(Debug)]
+pub struct UnionPatMustHaveExactlyOneField {
+ pub pat: InFile<ExprOrPatPtr>,
+}
+
+#[derive(Debug)]
+pub struct UnionPatHasRest {
+ pub pat: InFile<ExprOrPatPtr>,
+}
+
+#[derive(Debug)]
+pub struct RecordPatMissingFields {
+ pub pat: InFile<ExprOrPatPtr>,
+ pub missed_fields: Vec<Name>,
+}
+
+#[derive(Debug)]
pub struct InvalidLhsOfAssignment {
pub lhs: InFile<AstPtr<Either<ast::Expr, ast::Pat>>>,
}
@@ -942,6 +961,23 @@ impl<'db> AnyDiagnostic<'db> {
let pat = pat_syntax(pat)?.map(Into::into);
NonExhaustiveRecordPat { pat, variant: variant.into() }.into()
}
+ &InferenceDiagnostic::UnionPatMustHaveExactlyOneField { pat } => {
+ let pat = pat_syntax(pat)?.map(Into::into);
+ UnionPatMustHaveExactlyOneField { pat }.into()
+ }
+ &InferenceDiagnostic::UnionPatHasRest { pat } => {
+ let pat = pat_syntax(pat)?.map(Into::into);
+ UnionPatHasRest { pat }.into()
+ }
+ InferenceDiagnostic::RecordPatMissingFields { pat, variant, missing_fields } => {
+ let pat = pat_syntax(*pat)?.map(Into::into);
+ let variant_data = variant.fields(db);
+ let missed_fields = missing_fields
+ .iter()
+ .map(|field_id| variant_data.fields()[*field_id].name.clone())
+ .collect();
+ RecordPatMissingFields { pat, missed_fields }.into()
+ }
&InferenceDiagnostic::FunctionalRecordUpdateOnNonStruct { base_expr } => {
FunctionalRecordUpdateOnNonStruct { base_expr: expr_syntax(base_expr)? }.into()
}