aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion/complete_keyword.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/completion/complete_keyword.rs')
-rw-r--r--crates/ra_ide/src/completion/complete_keyword.rs36
1 files changed, 24 insertions, 12 deletions
diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs
index 2dc401f57..fe873527f 100644
--- a/crates/ra_ide/src/completion/complete_keyword.rs
+++ b/crates/ra_ide/src/completion/complete_keyword.rs
@@ -88,24 +88,22 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte
88 88
89 if ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent { 89 if ctx.has_item_list_or_source_file_parent && !has_trait_or_impl_parent {
90 add_keyword(ctx, acc, "enum", "enum $0 {}"); 90 add_keyword(ctx, acc, "enum", "enum $0 {}");
91 add_keyword(ctx, acc, "struct", "struct $0 {}"); 91 add_keyword(ctx, acc, "struct", "struct $0");
92 add_keyword(ctx, acc, "union", "union $0 {}"); 92 add_keyword(ctx, acc, "union", "union $0 {}");
93 } 93 }
94 94
95 if ctx.block_expr_parent || ctx.is_match_arm { 95 if ctx.can_be_expr {
96 add_keyword(ctx, acc, "match", "match $0 {}"); 96 add_keyword(ctx, acc, "match", "match $0 {}");
97 add_keyword(ctx, acc, "loop", "loop {$0}");
98 }
99 if ctx.block_expr_parent {
100 add_keyword(ctx, acc, "while", "while $0 {}"); 97 add_keyword(ctx, acc, "while", "while $0 {}");
98 add_keyword(ctx, acc, "loop", "loop {$0}");
99 add_keyword(ctx, acc, "if", "if ");
100 add_keyword(ctx, acc, "if let", "if let ");
101 } 101 }
102
102 if ctx.if_is_prev || ctx.block_expr_parent { 103 if ctx.if_is_prev || ctx.block_expr_parent {
103 add_keyword(ctx, acc, "let", "let "); 104 add_keyword(ctx, acc, "let", "let ");
104 } 105 }
105 if ctx.if_is_prev || ctx.block_expr_parent || ctx.is_match_arm { 106
106 add_keyword(ctx, acc, "if", "if ");
107 add_keyword(ctx, acc, "if let", "if let ");
108 }
109 if ctx.after_if { 107 if ctx.after_if {
110 add_keyword(ctx, acc, "else", "else {$0}"); 108 add_keyword(ctx, acc, "else", "else {$0}");
111 add_keyword(ctx, acc, "else if", "else if $0 {}"); 109 add_keyword(ctx, acc, "else if", "else if $0 {}");
@@ -343,9 +341,7 @@ mod tests {
343 check( 341 check(
344 r#" 342 r#"
345fn quux() -> i32 { 343fn quux() -> i32 {
346 match () { 344 match () { () => <|> }
347 () => <|>
348 }
349} 345}
350"#, 346"#,
351 expect![[r#" 347 expect![[r#"
@@ -355,6 +351,7 @@ fn quux() -> i32 {
355 kw match 351 kw match
356 kw return 352 kw return
357 kw unsafe 353 kw unsafe
354 kw while
358 "#]], 355 "#]],
359 ); 356 );
360 } 357 }
@@ -525,4 +522,19 @@ pub mod future {
525 "#]], 522 "#]],
526 ) 523 )
527 } 524 }
525
526 #[test]
527 fn after_let() {
528 check(
529 r#"fn main() { let _ = <|> }"#,
530 expect![[r#"
531 kw if
532 kw if let
533 kw loop
534 kw match
535 kw return
536 kw while
537 "#]],
538 )
539 }
528} 540}