Unnamed repository; edit this file 'description' to name the repository.
feat: offer block let fallback postfix complete
Example --- ```rust fn main() { match 2 { bar => bar.$0 } } ``` -> ```rust fn main() { match 2 { bar => { let $1 = bar; $0 } } } ```
A4-Tacks 2 months ago
parent d2a00da · commit 176590e
-rw-r--r--crates/ide-completion/src/completions/postfix.rs65
-rw-r--r--crates/ide-completion/src/render.rs2
-rw-r--r--crates/ide-completion/src/tests/expression.rs14
3 files changed, 80 insertions, 1 deletions
diff --git a/crates/ide-completion/src/completions/postfix.rs b/crates/ide-completion/src/completions/postfix.rs
index cffc44f8af..3a92903d05 100644
--- a/crates/ide-completion/src/completions/postfix.rs
+++ b/crates/ide-completion/src/completions/postfix.rs
@@ -161,7 +161,20 @@ pub(crate) fn complete_postfix(
postfix_snippet("letm", "let mut", &format!("let mut $0 = {receiver_text};"))
.add_to(acc, ctx.db);
}
- _ => (),
+ _ => {
+ postfix_snippet(
+ "let",
+ "let",
+ &format!("{{\n let $1 = {receiver_text};\n $0\n}}"),
+ )
+ .add_to(acc, ctx.db);
+ postfix_snippet(
+ "letm",
+ "let mut",
+ &format!("{{\n let mut $1 = {receiver_text};\n $0\n}}"),
+ )
+ .add_to(acc, ctx.db);
+ }
}
}
@@ -581,6 +594,8 @@ fn main() {
sn dbgr dbg!(&expr)
sn deref *expr
sn if if expr {}
+ sn let let
+ sn letm let mut
sn match match expr {}
sn not !expr
sn ref &expr
@@ -796,6 +811,54 @@ fn main() {
}
#[test]
+ fn let_fallback_block() {
+ check(
+ r#"
+fn main() {
+ match 2 {
+ bar => bar.$0
+ }
+}
+"#,
+ expect![[r#"
+ sn box Box::new(expr)
+ sn call function(expr)
+ sn const const {}
+ sn dbg dbg!(expr)
+ sn dbgr dbg!(&expr)
+ sn deref *expr
+ sn let let
+ sn letm let mut
+ sn match match expr {}
+ sn ref &expr
+ sn refm &mut expr
+ sn return return expr
+ sn unsafe unsafe {}
+ "#]],
+ );
+ check_edit(
+ "let",
+ r#"
+fn main() {
+ match 2 {
+ bar => bar.$0
+ }
+}
+"#,
+ r#"
+fn main() {
+ match 2 {
+ bar => {
+ let $1 = bar;
+ $0
+}
+ }
+}
+"#,
+ );
+ }
+
+ #[test]
fn option_letelse() {
check_edit(
"lete",
diff --git a/crates/ide-completion/src/render.rs b/crates/ide-completion/src/render.rs
index 765304d818..7a7b054b39 100644
--- a/crates/ide-completion/src/render.rs
+++ b/crates/ide-completion/src/render.rs
@@ -3033,6 +3033,8 @@ fn main() {
sn dbgr dbg!(&expr) []
sn deref *expr []
sn if if expr {} []
+ sn let let []
+ sn letm let mut []
sn match match expr {} []
sn ref &expr []
sn refm &mut expr []
diff --git a/crates/ide-completion/src/tests/expression.rs b/crates/ide-completion/src/tests/expression.rs
index df39591a33..b9b0f76c88 100644
--- a/crates/ide-completion/src/tests/expression.rs
+++ b/crates/ide-completion/src/tests/expression.rs
@@ -2341,6 +2341,8 @@ fn main() {
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn deref *expr
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ref &expr
sn refm &mut expr
@@ -2368,6 +2370,8 @@ fn main() {
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn deref *expr
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ref &expr
sn refm &mut expr
@@ -2399,6 +2403,8 @@ fn main() {
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn deref *expr
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ref &expr
sn refm &mut expr
@@ -2426,6 +2432,8 @@ fn main() {
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn deref *expr
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ref &expr
sn refm &mut expr
@@ -2453,6 +2461,8 @@ fn main() {
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn deref *expr
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ref &expr
sn refm &mut expr
@@ -2480,6 +2490,8 @@ fn main() {
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn deref *expr
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ref &expr
sn refm &mut expr
@@ -3268,6 +3280,8 @@ fn foo() {
sn dbg dbg!(expr)
sn dbgr dbg!(&expr)
sn deref *expr
+ sn let let
+ sn letm let mut
sn match match expr {}
sn ref &expr
sn refm &mut expr