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
}
}
}
```
| -rw-r--r-- | crates/ide-completion/src/completions/postfix.rs | 65 | ||||
| -rw-r--r-- | crates/ide-completion/src/render.rs | 2 | ||||
| -rw-r--r-- | crates/ide-completion/src/tests/expression.rs | 14 |
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 |