From 9b1bc19d67ab6e4549f9bc0098949b842ce19fd0 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 15 Jan 2021 15:01:32 +0300 Subject: Add braces when completing ifs --- crates/completion/src/completions/keyword.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/completion/src/completions') diff --git a/crates/completion/src/completions/keyword.rs b/crates/completion/src/completions/keyword.rs index 425a688ff..665214895 100644 --- a/crates/completion/src/completions/keyword.rs +++ b/crates/completion/src/completions/keyword.rs @@ -86,8 +86,8 @@ pub(crate) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte add_keyword(ctx, acc, "match", "match $0 {}"); add_keyword(ctx, acc, "while", "while $0 {}"); add_keyword(ctx, acc, "loop", "loop {$0}"); - add_keyword(ctx, acc, "if", "if "); - add_keyword(ctx, acc, "if let", "if let "); + add_keyword(ctx, acc, "if", "if $0 {}"); + add_keyword(ctx, acc, "if let", "if let $1 = $0 {}"); } if ctx.if_is_prev || ctx.block_expr_parent { -- cgit v1.2.3 From 41ea2602017027e22f5a68df3d6ad98e2ae880f8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 15 Jan 2021 15:13:30 +0300 Subject: Simplify --- crates/completion/src/completions/keyword.rs | 46 ++++++++++++---------------- 1 file changed, 19 insertions(+), 27 deletions(-) (limited to 'crates/completion/src/completions') diff --git a/crates/completion/src/completions/keyword.rs b/crates/completion/src/completions/keyword.rs index 665214895..effc3e4bf 100644 --- a/crates/completion/src/completions/keyword.rs +++ b/crates/completion/src/completions/keyword.rs @@ -1,6 +1,6 @@ //! Completes keywords. -use syntax::{ast, SyntaxKind}; +use syntax::SyntaxKind; use test_utils::mark; use crate::{CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, Completions}; @@ -143,47 +143,39 @@ pub(crate) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte Some(it) => it, None => return, }; - acc.add_all(complete_return(ctx, &fn_def, ctx.can_be_stmt)); -} - -fn keyword(ctx: &CompletionContext, kw: &str, snippet: &str) -> CompletionItem { - let res = CompletionItem::new(CompletionKind::Keyword, ctx.source_range(), kw) - .kind(CompletionItemKind::Keyword); - match ctx.config.snippet_cap { - Some(cap) => res.insert_snippet(cap, snippet), - _ => res.insert_text(if snippet.contains('$') { kw } else { snippet }), - } - .build() + add_keyword( + ctx, + acc, + "return", + match (ctx.can_be_stmt, fn_def.ret_type().is_some()) { + (true, true) => "return $0;", + (true, false) => "return;", + (false, true) => "return $0", + (false, false) => "return", + }, + ) } fn add_keyword(ctx: &CompletionContext, acc: &mut Completions, kw: &str, snippet: &str) { - acc.add(keyword(ctx, kw, snippet)); -} - -fn complete_return( - ctx: &CompletionContext, - fn_def: &ast::Fn, - can_be_stmt: bool, -) -> Option { - let snip = match (can_be_stmt, fn_def.ret_type().is_some()) { - (true, true) => "return $0;", - (true, false) => "return;", - (false, true) => "return $0", - (false, false) => "return", + 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), + None => builder.insert_text(if snippet.contains('$') { kw } else { snippet }), }; - Some(keyword(ctx, "return", snip)) + acc.add(builder.build()); } #[cfg(test)] mod tests { use expect_test::{expect, Expect}; + use test_utils::mark; use crate::{ test_utils::{check_edit, completion_list}, CompletionKind, }; - use test_utils::mark; fn check(ra_fixture: &str, expect: Expect) { let actual = completion_list(ra_fixture, CompletionKind::Keyword); -- cgit v1.2.3 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') 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