about summary refs log tree commit diff
diff options
context:
space:
mode:
authorA4-Tacks <wdsjxhno1001@163.com>2025-05-03 12:45:00 +0800
committerA4-Tacks <wdsjxhno1001@163.com>2025-05-03 13:15:32 +0800
commit1327f7034916dcfdf3038028d6a25726e0d52fef (patch)
treecd7128ce388ca5c78c0b6b1315b620023d689220
parent429027a40fccaf6835860728c3217e4f9cb5709d (diff)
downloadrust-1327f7034916dcfdf3038028d6a25726e0d52fef.tar.gz
rust-1327f7034916dcfdf3038028d6a25726e0d52fef.zip
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..2245f58bc62 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 = $2;");
+                        add_keyword("let", "let $1 = $2;");
                     }
 
                     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..0becdf065ac 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 = $2;
 }
 "#,
         );
@@ -359,7 +359,97 @@ fn main() {
 "#,
             r#"
 fn main() {
-    let mut $0
+    let mut $1 = $2;
+}
+"#,
+        );
+    }
+
+    #[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 = $2; } {}
+}
+"#,
+        );
+        check_edit(
+            "letm",
+            r#"
+fn main() {
+    if { $0 } {}
+}
+"#,
+            r#"
+fn main() {
+    if { let mut $1 = $2; } {}
 }
 "#,
         );