Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-ty/src/infer/pat.rs11
-rw-r--r--crates/ide-diagnostics/src/handlers/type_mismatch.rs11
2 files changed, 9 insertions, 13 deletions
diff --git a/crates/hir-ty/src/infer/pat.rs b/crates/hir-ty/src/infer/pat.rs
index 6481e0b7a7..4c97eabd9c 100644
--- a/crates/hir-ty/src/infer/pat.rs
+++ b/crates/hir-ty/src/infer/pat.rs
@@ -181,8 +181,8 @@ impl<'a> InferenceContext<'a> {
.intern(Interner)
}
- pub(super) fn infer_top_pat(&mut self, pat: PatId, expected: &Ty) -> Ty {
- self.infer_pat(pat, expected, BindingMode::default())
+ pub(super) fn infer_top_pat(&mut self, pat: PatId, expected: &Ty) {
+ self.infer_pat(pat, expected, BindingMode::default());
}
fn infer_pat(&mut self, pat: PatId, expected: &Ty, mut default_bm: BindingMode) -> Ty {
@@ -260,7 +260,12 @@ impl<'a> InferenceContext<'a> {
let start_ty = self.infer_expr(*start, &Expectation::has_type(expected.clone()));
self.infer_expr(*end, &Expectation::has_type(start_ty))
}
- &Pat::Lit(expr) => self.infer_lit_pat(expr, &expected),
+ &Pat::Lit(expr) => {
+ // Don't emit type mismatches again, the expression lowering already did that.
+ let ty = self.infer_lit_pat(expr, &expected);
+ self.write_pat_ty(pat, ty.clone());
+ return ty;
+ }
Pat::Box { inner } => match self.resolve_boxed_box() {
Some(box_adt) => {
let (inner_ty, alloc_ty) = match expected.as_adt() {
diff --git a/crates/ide-diagnostics/src/handlers/type_mismatch.rs b/crates/ide-diagnostics/src/handlers/type_mismatch.rs
index 948ca4f632..2026a2d4b8 100644
--- a/crates/ide-diagnostics/src/handlers/type_mismatch.rs
+++ b/crates/ide-diagnostics/src/handlers/type_mismatch.rs
@@ -54,7 +54,7 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::TypeMismatch) -> Option<Vec<Assi
remove_semicolon(ctx, d, expr_ptr, &mut fixes);
str_ref_to_owned(ctx, d, expr_ptr, &mut fixes);
}
- Either::Right(_pat_ptr) => (),
+ Either::Right(_pat_ptr) => {}
}
if fixes.is_empty() {
@@ -63,14 +63,6 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::TypeMismatch) -> Option<Vec<Assi
Some(fixes)
}
}
-fn add_reference_pat(
- ctx: &DiagnosticsContext<'_>,
- d: &hir::TypeMismatch,
- expr_ptr: &InFile<AstPtr<ast::Pat>>,
- acc: &mut Vec<Assist>,
-) -> Option<()> {
- None
-}
fn add_reference(
ctx: &DiagnosticsContext<'_>,
@@ -630,7 +622,6 @@ fn f() {
&9 => ()
//^^ error: expected &(), found &i32
//^ error: expected (), found i32
- //^ error: expected (), found i32
}
}
"#,