From f2ba2048d1afb816623d037f265f4445a2f44b54 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 15 Jan 2021 15:49:59 +0300 Subject: Insert `;` when completing keywords in let --- crates/completion/src/completions/keyword.rs | 58 +++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'crates/completion/src/completions/keyword.rs') diff --git a/crates/completion/src/completions/keyword.rs b/crates/completion/src/completions/keyword.rs index effc3e4bf..c1af348dc 100644 --- a/crates/completion/src/completions/keyword.rs +++ b/crates/completion/src/completions/keyword.rs @@ -161,7 +161,17 @@ fn add_keyword(ctx: &CompletionContext, acc: &mut Completions, kw: &str, snippet let builder = CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw) .kind(CompletionItemKind::Keyword); let builder = match ctx.config.snippet_cap { - Some(cap) => builder.insert_snippet(cap, snippet), + Some(cap) => { + let tmp; + let snippet = if snippet.ends_with('}') && ctx.incomplete_let { + mark::hit!(let_semi); + tmp = format!("{};", snippet); + &tmp + } else { + snippet + }; + builder.insert_snippet(cap, snippet) + } None => builder.insert_text(if snippet.contains('$') { kw } else { snippet }), }; acc.add(builder.build()); @@ -601,4 +611,50 @@ fn foo() { "#]], ); } + + #[test] + fn let_semi() { + mark::check!(let_semi); + check_edit( + "match", + r#" +fn main() { let x = $0 } +"#, + r#" +fn main() { let x = match $0 {}; } +"#, + ); + + check_edit( + "if", + r#" +fn main() { + let x = $0 + let y = 92; +} +"#, + r#" +fn main() { + let x = if $0 {}; + let y = 92; +} +"#, + ); + + check_edit( + "loop", + r#" +fn main() { + let x = $0 + bar(); +} +"#, + r#" +fn main() { + let x = loop {$0}; + bar(); +} +"#, + ); + } } -- cgit v1.2.3