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.rs | 36 |
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() } |