Unnamed repository; edit this file 'description' to name the repository.
Merge pull request #20946 from A4-Tacks/to-guarded-in-stmt
Fix not applicable on statement for convert_to_guarded_return
Shoyu Vanilla (Flint) 3 months ago
parent ac646ee · parent 9b80d75 · commit 7a248da
-rw-r--r--crates/ide-assists/src/handlers/convert_to_guarded_return.rs72
1 files changed, 71 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/convert_to_guarded_return.rs b/crates/ide-assists/src/handlers/convert_to_guarded_return.rs
index 08b114072f..ea5c1637b7 100644
--- a/crates/ide-assists/src/handlers/convert_to_guarded_return.rs
+++ b/crates/ide-assists/src/handlers/convert_to_guarded_return.rs
@@ -95,7 +95,9 @@ fn if_expr_to_guarded_return(
let parent_block = if_expr.syntax().parent()?.ancestors().find_map(ast::BlockExpr::cast)?;
- if parent_block.tail_expr()? != if_expr.clone().into() {
+ if parent_block.tail_expr() != Some(if_expr.clone().into())
+ && !(else_block.is_some() && ast::ExprStmt::can_cast(if_expr.syntax().parent()?.kind()))
+ {
return None;
}
@@ -503,6 +505,36 @@ fn main() {
}
#[test]
+ fn convert_if_let_has_else_block_in_statement() {
+ check_assist(
+ convert_to_guarded_return,
+ r#"
+fn main() {
+ some_statements();
+ if$0 let Ok(x) = Err(92) {
+ foo(x);
+ } else {
+ // needless comment
+ return;
+ }
+ some_statements();
+}
+"#,
+ r#"
+fn main() {
+ some_statements();
+ let Ok(x) = Err(92) else {
+ // needless comment
+ return;
+ };
+ foo(x);
+ some_statements();
+}
+"#,
+ );
+ }
+
+ #[test]
fn convert_if_let_result_inside_let() {
check_assist(
convert_to_guarded_return,
@@ -1137,6 +1169,44 @@ fn main() {
}
#[test]
+ fn ignore_else_if() {
+ check_assist_not_applicable(
+ convert_to_guarded_return,
+ r#"
+fn main() {
+ some_statements();
+ if cond {
+ ()
+ } else if$0 let Ok(x) = Err(92) {
+ foo(x);
+ } else {
+ return;
+ }
+ some_statements();
+}
+"#,
+ );
+ }
+
+ #[test]
+ fn ignore_if_inside_let() {
+ check_assist_not_applicable(
+ convert_to_guarded_return,
+ r#"
+fn main() {
+ some_statements();
+ let _ = if$0 let Ok(x) = Err(92) {
+ foo(x);
+ } else {
+ return;
+ }
+ some_statements();
+}
+"#,
+ );
+ }
+
+ #[test]
fn ignore_let_else_branch() {
check_assist_not_applicable(
convert_to_guarded_return,