summaryrefslogtreecommitdiffstats
path: root/src/tools/rust-analyzer/crates/ide-assists/src/handlers/unwrap_block.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide-assists/src/handlers/unwrap_block.rs')
-rw-r--r--src/tools/rust-analyzer/crates/ide-assists/src/handlers/unwrap_block.rs47
1 files changed, 46 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/unwrap_block.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/unwrap_block.rs
index 7969a4918..53cdac03a 100644
--- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/unwrap_block.rs
+++ b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/unwrap_block.rs
@@ -37,7 +37,8 @@ pub(crate) fn unwrap_block(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
parent = parent.ancestors().find(|it| ast::MatchExpr::can_cast(it.kind()))?
}
- if matches!(parent.kind(), SyntaxKind::STMT_LIST | SyntaxKind::EXPR_STMT) {
+ if matches!(parent.kind(), SyntaxKind::STMT_LIST | SyntaxKind::EXPR_STMT | SyntaxKind::LET_STMT)
+ {
return acc.add(assist_id, assist_label, target, |builder| {
builder.replace(block.syntax().text_range(), update_expr_string(block.to_string()));
});
@@ -716,4 +717,48 @@ fn main() -> i32 {
"#,
);
}
+
+ #[test]
+ fn unwrap_block_in_let_initializers() {
+ // https://github.com/rust-lang/rust-analyzer/issues/13679
+ check_assist(
+ unwrap_block,
+ r#"
+fn main() {
+ let x = {$0
+ bar
+ };
+}
+"#,
+ r#"
+fn main() {
+ let x = bar;
+}
+"#,
+ );
+ }
+
+ #[test]
+ fn unwrap_if_in_let_initializers() {
+ // https://github.com/rust-lang/rust-analyzer/issues/13679
+ check_assist(
+ unwrap_block,
+ r#"
+fn main() {
+ let a = 1;
+ let x = if a - 1 == 0 {$0
+ foo
+ } else {
+ bar
+ };
+}
+"#,
+ r#"
+fn main() {
+ let a = 1;
+ let x = foo;
+}
+"#,
+ );
+ }
}