about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2025-05-04 04:06:56 +0000
committerGitHub <noreply@github.com>2025-05-04 04:06:56 +0000
commit58ef378c21dfe1c6d75520ca67993421f3aafbe2 (patch)
tree4dfd167e570a5bb72f86b6b0162947e1055979c0
parent429027a40fccaf6835860728c3217e4f9cb5709d (diff)
parent7768602f97489bb47bc544f4d005e7a0f4194314 (diff)
downloadrust-58ef378c21dfe1c6d75520ca67993421f3aafbe2.tar.gz
rust-58ef378c21dfe1c6d75520ca67993421f3aafbe2.zip
Merge pull request #19735 from A4-Tacks/improve-let-snippet
Improve the let code snippet
-rw-r--r--src/tools/rust-analyzer/crates/ide-completion/src/completions/expr.rs11
-rw-r--r--src/tools/rust-analyzer/crates/ide-completion/src/completions/keyword.rs96
2 files changed, 101 insertions, 6 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/completions/expr.rs b/src/tools/rust-analyzer/crates/ide-completion/src/completions/expr.rs
index ee1a21f9a1a..7fbd1fbc1af 100644
--- a/src/tools/rust-analyzer/crates/ide-completion/src/completions/expr.rs
+++ b/src/tools/rust-analyzer/crates/ide-completion/src/completions/expr.rs
@@ -363,9 +363,14 @@ pub(crate) fn complete_expr_path(
                     add_keyword("true", "true");
                     add_keyword("false", "false");
 
-                    if in_condition || in_block_expr {
-                        add_keyword("letm", "let mut $0");
-                        add_keyword("let", "let $0");
+                    if in_condition {
+                        add_keyword("letm", "let mut $1 = $0");
+                        add_keyword("let", "let $1 = $0");
+                    }
+
+                    if in_block_expr {
+                        add_keyword("letm", "let mut $1 = $0;");
+                        add_keyword("let", "let $1 = $0;");
                     }
 
                     if after_if_expr {
diff --git a/src/tools/rust-analyzer/crates/ide-completion/src/completions/keyword.rs b/src/tools/rust-analyzer/crates/ide-completion/src/completions/keyword.rs
index 039742463c8..64bb1fce6ba 100644
--- a/src/tools/rust-analyzer/crates/ide-completion/src/completions/keyword.rs
+++ b/src/tools/rust-analyzer/crates/ide-completion/src/completions/keyword.rs
@@ -336,7 +336,7 @@ fn main() {
     }
 
     #[test]
-    fn completes_let_with_space() {
+    fn completes_let_in_block() {
         check_edit(
             "let",
             r#"
@@ -346,7 +346,7 @@ fn main() {
 "#,
             r#"
 fn main() {
-    let $0
+    let $1 = $0;
 }
 "#,
         );
@@ -359,7 +359,97 @@ fn main() {
 "#,
             r#"
 fn main() {
-    let mut $0
+    let mut $1 = $0;
+}
+"#,
+        );
+    }
+
+    #[test]
+    fn completes_let_in_condition() {
+        check_edit(
+            "let",
+            r#"
+fn main() {
+    if $0 {}
+}
+"#,
+            r#"
+fn main() {
+    if let $1 = $0 {}
+}
+"#,
+        );
+        check_edit(
+            "letm",
+            r#"
+fn main() {
+    if $0 {}
+}
+"#,
+            r#"
+fn main() {
+    if let mut $1 = $0 {}
+}
+"#,
+        );
+    }
+
+    #[test]
+    fn completes_let_in_no_empty_condition() {
+        check_edit(
+            "let",
+            r#"
+fn main() {
+    if $0x {}
+}
+"#,
+            r#"
+fn main() {
+    if let $1 = $0x {}
+}
+"#,
+        );
+        check_edit(
+            "letm",
+            r#"
+fn main() {
+    if $0x {}
+}
+"#,
+            r#"
+fn main() {
+    if let mut $1 = $0x {}
+}
+"#,
+        );
+    }
+
+    #[test]
+    fn completes_let_in_condition_block() {
+        check_edit(
+            "let",
+            r#"
+fn main() {
+    if { $0 } {}
+}
+"#,
+            r#"
+fn main() {
+    if { let $1 = $0; } {}
+}
+"#,
+        );
+        check_edit(
+            "letm",
+            r#"
+fn main() {
+    if { $0 } {}
+}
+"#,
+            r#"
+fn main() {
+    if { let mut $1 = $0; } {}
 }
 "#,
         );