From c99fca1f2d247f46f6a9082a9b482b16a86077e9 Mon Sep 17 00:00:00 2001 From: A4-Tacks Date: Sat, 31 Jan 2026 05:46:06 +0800 Subject: [PATCH] feat: fallback let postfix completions in condition Easy to input other patterns, or bind variable in let-chain Example --- ```rust fn main() { let bar = 2; if bar.$0 } ``` **Before this PR** No complete 'let' **After this PR** ```rust fn main() { let bar = 2; if let $1 = bar } ``` --- .../ide-completion/src/completions/postfix.rs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix.rs b/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix.rs index 7f67ef848ece..4b244c9025a5 100644 --- a/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix.rs +++ b/src/tools/rust-analyzer/crates/ide-completion/src/completions/postfix.rs @@ -151,6 +151,10 @@ pub(crate) fn complete_postfix( .add_to(acc, ctx.db); } }, + _ if is_in_cond => { + postfix_snippet("let", "let", &format!("let $1 = {receiver_text}")) + .add_to(acc, ctx.db); + } _ if matches!(second_ancestor.kind(), STMT_LIST | EXPR_STMT) => { postfix_snippet("let", "let", &format!("let $0 = {receiver_text};")) .add_to(acc, ctx.db); @@ -744,6 +748,25 @@ fn main() { ); } + #[test] + fn iflet_fallback_cond() { + check_edit( + "let", + r#" +fn main() { + let bar = 2; + if bar.$0 +} +"#, + r#" +fn main() { + let bar = 2; + if let $1 = bar +} +"#, + ); + } + #[test] fn option_letelse() { check_edit(