Unnamed repository; edit this file 'description' to name the repository.
Allow `break` and co to go through `try{}` blocks
Maybe Waffle 2022-12-29
parent 16264a3 · commit eecab99
-rw-r--r--crates/hir-ty/src/infer/expr.rs2
-rw-r--r--crates/ide-diagnostics/src/handlers/break_outside_of_loop.rs36
2 files changed, 17 insertions, 21 deletions
diff --git a/crates/hir-ty/src/infer/expr.rs b/crates/hir-ty/src/infer/expr.rs
index b1f4de8260..0d3f15c3d5 100644
--- a/crates/hir-ty/src/infer/expr.rs
+++ b/crates/hir-ty/src/infer/expr.rs
@@ -152,7 +152,7 @@ impl<'a> InferenceContext<'a> {
.1
}
Expr::TryBlock { body } => {
- self.with_breakable_ctx(BreakableKind::Border, self.err_ty(), None, |this| {
+ self.with_breakable_ctx(BreakableKind::Block, self.err_ty(), None, |this| {
let _inner = this.infer_expr(*body, expected);
});
// FIXME should be std::result::Result<{inner}, _>
diff --git a/crates/ide-diagnostics/src/handlers/break_outside_of_loop.rs b/crates/ide-diagnostics/src/handlers/break_outside_of_loop.rs
index 0c92e706b3..7a957e1c50 100644
--- a/crates/ide-diagnostics/src/handlers/break_outside_of_loop.rs
+++ b/crates/ide-diagnostics/src/handlers/break_outside_of_loop.rs
@@ -38,7 +38,7 @@ fn foo() {
}
#[test]
- fn try_blocks_are_borders() {
+ fn async_blocks_are_borders() {
check_diagnostics(
r#"
fn foo() {
@@ -60,7 +60,7 @@ fn foo() {
}
#[test]
- fn async_blocks_are_borders() {
+ fn closures_are_borders() {
check_diagnostics(
r#"
fn foo() {
@@ -82,21 +82,17 @@ fn foo() {
}
#[test]
- fn closures_are_borders() {
+ fn blocks_pass_through() {
check_diagnostics(
r#"
fn foo() {
'a: loop {
- try {
- break;
- //^^^^^ error: break outside of loop
- break 'a;
- //^^^^^^^^ error: break outside of loop
- continue;
- //^^^^^^^^ error: continue outside of loop
- continue 'a;
- //^^^^^^^^^^^ error: continue outside of loop
- };
+ {
+ break;
+ break 'a;
+ continue;
+ continue 'a;
+ }
}
}
"#,
@@ -104,17 +100,17 @@ fn foo() {
}
#[test]
- fn blocks_pass_through() {
+ fn try_blocks_pass_through() {
check_diagnostics(
r#"
fn foo() {
'a: loop {
- {
- break;
- break 'a;
- continue;
- continue 'a;
- }
+ try {
+ break;
+ break 'a;
+ continue;
+ continue 'a;
+ };
}
}
"#,