diff options
Diffstat (limited to 'crates/ra_hir_ty/src/expr.rs')
-rw-r--r-- | crates/ra_hir_ty/src/expr.rs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/crates/ra_hir_ty/src/expr.rs b/crates/ra_hir_ty/src/expr.rs index 69b527f74..21abbcf1e 100644 --- a/crates/ra_hir_ty/src/expr.rs +++ b/crates/ra_hir_ty/src/expr.rs | |||
@@ -161,12 +161,6 @@ impl<'a, 'b> ExprValidator<'a, 'b> { | |||
161 | 161 | ||
162 | let mut seen = Matrix::empty(); | 162 | let mut seen = Matrix::empty(); |
163 | for pat in pats { | 163 | for pat in pats { |
164 | // We skip any patterns whose type we cannot resolve. | ||
165 | // | ||
166 | // This could lead to false positives in this diagnostic, so | ||
167 | // it might be better to skip the entire diagnostic if we either | ||
168 | // cannot resolve a match arm or determine that the match arm has | ||
169 | // the wrong type. | ||
170 | if let Some(pat_ty) = infer.type_of_pat.get(pat) { | 164 | if let Some(pat_ty) = infer.type_of_pat.get(pat) { |
171 | // We only include patterns whose type matches the type | 165 | // We only include patterns whose type matches the type |
172 | // of the match expression. If we had a InvalidMatchArmPattern | 166 | // of the match expression. If we had a InvalidMatchArmPattern |
@@ -189,8 +183,15 @@ impl<'a, 'b> ExprValidator<'a, 'b> { | |||
189 | // to the matrix here. | 183 | // to the matrix here. |
190 | let v = PatStack::from_pattern(pat); | 184 | let v = PatStack::from_pattern(pat); |
191 | seen.push(&cx, v); | 185 | seen.push(&cx, v); |
186 | continue; | ||
192 | } | 187 | } |
193 | } | 188 | } |
189 | |||
190 | // If we can't resolve the type of a pattern, or the pattern type doesn't | ||
191 | // fit the match expression, we skip this diagnostic. Skipping the entire | ||
192 | // diagnostic rather than just not including this match arm is preferred | ||
193 | // to avoid the chance of false positives. | ||
194 | return; | ||
194 | } | 195 | } |
195 | 196 | ||
196 | match is_useful(&cx, &seen, &PatStack::from_wild()) { | 197 | match is_useful(&cx, &seen, &PatStack::from_wild()) { |