Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide-completion/src/completions/expr.rs11
-rw-r--r--crates/ide-completion/src/completions/keyword.rs96
2 files changed, 101 insertions, 6 deletions
diff --git a/crates/ide-completion/src/completions/expr.rs b/crates/ide-completion/src/completions/expr.rs
index ee1a21f9a1..2245f58bc6 100644
--- a/crates/ide-completion/src/completions/expr.rs
+++ b/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/crates/ide-completion/src/completions/keyword.rs b/crates/ide-completion/src/completions/keyword.rs
index 039742463c..0becdf065a 100644
--- a/crates/ide-completion/src/completions/keyword.rs
+++ b/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; } {}
}
"#,
);