fix: Missing non-exhaustive let diagnostics inside async or unsafe block
This commit is contained in:
parent
e66f3db9fa
commit
3bb7f35ec4
@ -117,7 +117,7 @@ fn validate_body(&mut self, db: &dyn HirDatabase) {
|
|||||||
Expr::If { .. } => {
|
Expr::If { .. } => {
|
||||||
self.check_for_unnecessary_else(id, expr, db);
|
self.check_for_unnecessary_else(id, expr, db);
|
||||||
}
|
}
|
||||||
Expr::Block { .. } => {
|
Expr::Block { .. } | Expr::Async { .. } | Expr::Unsafe { .. } => {
|
||||||
self.validate_block(db, expr);
|
self.validate_block(db, expr);
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
@ -254,7 +254,12 @@ fn validate_match(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn validate_block(&mut self, db: &dyn HirDatabase, expr: &Expr) {
|
fn validate_block(&mut self, db: &dyn HirDatabase, expr: &Expr) {
|
||||||
let Expr::Block { statements, .. } = expr else { return };
|
let (Expr::Block { statements, .. }
|
||||||
|
| Expr::Async { statements, .. }
|
||||||
|
| Expr::Unsafe { statements, .. }) = expr
|
||||||
|
else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
let pattern_arena = Arena::new();
|
let pattern_arena = Arena::new();
|
||||||
let cx = MatchCheckCtx::new(self.owner.module(db.upcast()), self.owner, db);
|
let cx = MatchCheckCtx::new(self.owner.module(db.upcast()), self.owner, db);
|
||||||
for stmt in &**statements {
|
for stmt in &**statements {
|
||||||
|
@ -41,6 +41,45 @@ fn option_exhaustive() {
|
|||||||
fn main() {
|
fn main() {
|
||||||
let Some(_) | None = Some(5);
|
let Some(_) | None = Some(5);
|
||||||
}
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn option_nonexhaustive_inside_blocks() {
|
||||||
|
check_diagnostics(
|
||||||
|
r#"
|
||||||
|
//- minicore: option
|
||||||
|
fn main() {
|
||||||
|
'_a: {
|
||||||
|
let None = Some(5);
|
||||||
|
//^^^^ error: non-exhaustive pattern: `Some(_)` not covered
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_diagnostics(
|
||||||
|
r#"
|
||||||
|
//- minicore: future, option
|
||||||
|
fn main() {
|
||||||
|
let _ = async {
|
||||||
|
let None = Some(5);
|
||||||
|
//^^^^ error: non-exhaustive pattern: `Some(_)` not covered
|
||||||
|
};
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_diagnostics(
|
||||||
|
r#"
|
||||||
|
//- minicore: option
|
||||||
|
fn main() {
|
||||||
|
unsafe {
|
||||||
|
let None = Some(5);
|
||||||
|
//^^^^ error: non-exhaustive pattern: `Some(_)` not covered
|
||||||
|
}
|
||||||
|
}
|
||||||
"#,
|
"#,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user