aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/infer
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2020-02-21 15:56:34 +0000
committerFlorian Diebold <[email protected]>2020-02-21 16:01:19 +0000
commitf1f45f9191d60c52dbedec717aee0de4a0580bcc (patch)
treebaebf708dcdc154fbe4fe903906e11e344a09802 /crates/ra_hir_ty/src/infer
parente3037c2631ecb55996b676ce2c18b9df1858abaa (diff)
Fix handling of const patterns
E.g. in `match x { None => ... }`, `None` is a path pattern (resolving to the option variant), not a binding. To determine this, we need to try to resolve the name during lowering. This isn't too hard since we already need to resolve names for macro expansion anyway (though maybe a bit hacky). Fixes #1618.
Diffstat (limited to 'crates/ra_hir_ty/src/infer')
-rw-r--r--crates/ra_hir_ty/src/infer/pat.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/crates/ra_hir_ty/src/infer/pat.rs b/crates/ra_hir_ty/src/infer/pat.rs
index a495ecbfe..bf8ea192b 100644
--- a/crates/ra_hir_ty/src/infer/pat.rs
+++ b/crates/ra_hir_ty/src/infer/pat.rs
@@ -189,7 +189,9 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
189 }; 189 };
190 // use a new type variable if we got Ty::Unknown here 190 // use a new type variable if we got Ty::Unknown here
191 let ty = self.insert_type_vars_shallow(ty); 191 let ty = self.insert_type_vars_shallow(ty);
192 self.unify(&ty, expected); 192 if !self.unify(&ty, expected) {
193 // FIXME record mismatch, we need to change the type of self.type_mismatches for that
194 }
193 let ty = self.resolve_ty_as_possible(ty); 195 let ty = self.resolve_ty_as_possible(ty);
194 self.write_pat_ty(pat, ty.clone()); 196 self.write_pat_ty(pat, ty.clone());
195 ty 197 ty