aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/expr
diff options
context:
space:
mode:
authorPhil Ellison <[email protected]>2019-08-11 11:40:08 +0100
committerAleksey Kladov <[email protected]>2019-08-25 10:55:55 +0100
commitbacb938ab096e3e2885e7bbb5e2cdbebe53292ea (patch)
tree8d2b95f60e06e8a57a84c3d128397433c0a99716 /crates/ra_hir/src/expr
parentd00a285fa757307bbe0f8dac9e49ac247cf9dab1 (diff)
Add type_mismatches to InferenceResult and use this in ok-wrapping code fix
Diffstat (limited to 'crates/ra_hir/src/expr')
-rw-r--r--crates/ra_hir/src/expr/validation.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/crates/ra_hir/src/expr/validation.rs b/crates/ra_hir/src/expr/validation.rs
index f5e641557..0e7b08c54 100644
--- a/crates/ra_hir/src/expr/validation.rs
+++ b/crates/ra_hir/src/expr/validation.rs
@@ -102,14 +102,16 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
102 } 102 }
103 103
104 fn validate_results_in_tail_expr(&mut self, id: ExprId, db: &impl HirDatabase) { 104 fn validate_results_in_tail_expr(&mut self, id: ExprId, db: &impl HirDatabase) {
105 let expr_ty = &self.infer[id]; 105 let mismatch = match self.infer.type_mismatch_for_expr(id) {
106 let func_ty = self.func.ty(db); 106 Some(m) => m,
107 let func_sig = func_ty.callable_sig(db).unwrap(); 107 None => return,
108 let ret = func_sig.ret(); 108 };
109 let ret = match ret { 109
110 let ret = match &mismatch.expected {
110 Ty::Apply(t) => t, 111 Ty::Apply(t) => t,
111 _ => return, 112 _ => return,
112 }; 113 };
114
113 let ret_enum = match ret.ctor { 115 let ret_enum = match ret.ctor {
114 TypeCtor::Adt(AdtDef::Enum(e)) => e, 116 TypeCtor::Adt(AdtDef::Enum(e)) => e,
115 _ => return, 117 _ => return,
@@ -119,7 +121,7 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
119 return; 121 return;
120 } 122 }
121 let params = &ret.parameters; 123 let params = &ret.parameters;
122 if params.len() == 2 && &params[0] == expr_ty { 124 if params.len() == 2 && &params[0] == &mismatch.actual {
123 let source_map = self.func.body_source_map(db); 125 let source_map = self.func.body_source_map(db);
124 let file_id = self.func.source(db).file_id; 126 let file_id = self.func.source(db).file_id;
125 let parse = db.parse(file_id.original_file(db)); 127 let parse = db.parse(file_id.original_file(db));