diff options
Diffstat (limited to 'crates/ra_ide/src/completion/complete_keyword.rs')
-rw-r--r-- | crates/ra_ide/src/completion/complete_keyword.rs | 36 |
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#" |
345 | fn quux() -> i32 { | 343 | fn 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 | } |