From d08e81cdd818dd3378c292767e15a38e6bbc6f6c Mon Sep 17 00:00:00 2001 From: gfreezy Date: Sat, 19 Jan 2019 22:02:50 +0800 Subject: refactor completions to use TextEdit instead of InsertText --- .../ra_ide_api/src/completion/complete_snippet.rs | 37 ++++++++-------------- 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'crates/ra_ide_api/src/completion/complete_snippet.rs') diff --git a/crates/ra_ide_api/src/completion/complete_snippet.rs b/crates/ra_ide_api/src/completion/complete_snippet.rs index a495751dd..fb94e3674 100644 --- a/crates/ra_ide_api/src/completion/complete_snippet.rs +++ b/crates/ra_ide_api/src/completion/complete_snippet.rs @@ -1,7 +1,7 @@ use crate::completion::{CompletionItem, Completions, CompletionKind, CompletionItemKind, CompletionContext, completion_item::Builder}; -fn snippet(label: &str, snippet: &str) -> Builder { - CompletionItem::new(CompletionKind::Snippet, label) +fn snippet<'a>(ctx: &'a CompletionContext<'a>, label: &str, snippet: &str) -> Builder<'a> { + CompletionItem::new(CompletionKind::Snippet, ctx, label) .snippet(snippet) .kind(CompletionItemKind::Snippet) } @@ -10,8 +10,8 @@ pub(super) fn complete_expr_snippet(acc: &mut Completions, ctx: &CompletionConte if !(ctx.is_trivial_path && ctx.function_syntax.is_some()) { return; } - snippet("pd", "eprintln!(\"$0 = {:?}\", $0);").add_to(acc); - snippet("ppd", "eprintln!(\"$0 = {:#?}\", $0);").add_to(acc); + snippet(ctx, "pd", "eprintln!(\"$0 = {:?}\", $0);").add_to(acc); + snippet(ctx, "ppd", "eprintln!(\"$0 = {:#?}\", $0);").add_to(acc); } pub(super) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionContext) { @@ -19,6 +19,7 @@ pub(super) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionConte return; } snippet( + ctx, "Test function", "\ #[test] @@ -29,45 +30,33 @@ fn ${1:feature}() { .lookup_by("tfn") .add_to(acc); - snippet("pub(crate)", "pub(crate) $0").add_to(acc); + snippet(ctx, "pub(crate)", "pub(crate) $0").add_to(acc); } #[cfg(test)] mod tests { - use crate::completion::{CompletionKind, check_completion}; - fn check_snippet_completion(code: &str, expected_completions: &str) { - check_completion(code, expected_completions, CompletionKind::Snippet); + use crate::completion::CompletionKind; + use crate::completion::completion_item::check_completion; + + fn check_snippet_completion(name: &str, code: &str) { + check_completion(name, code, CompletionKind::Snippet); } #[test] fn completes_snippets_in_expressions() { - check_snippet_completion( - r"fn foo(x: i32) { <|> }", - r##" - pd "eprintln!(\"$0 = {:?}\", $0);" - ppd "eprintln!(\"$0 = {:#?}\", $0);" - "##, - ); + check_snippet_completion("snippets_in_expressions", r"fn foo(x: i32) { <|> }"); } #[test] fn completes_snippets_in_items() { - // check_snippet_completion(r" - // <|> - // ", - // r##"[CompletionItem { label: "Test function", lookup: None, snippet: Some("#[test]\nfn test_${1:feature}() {\n$0\n}"##, - // ); check_snippet_completion( + "snippets_in_items", r" #[cfg(test)] mod tests { <|> } ", - r##" - tfn "Test function" "#[test]\nfn ${1:feature}() {\n $0\n}" - pub(crate) "pub(crate) $0" - "##, ); } } -- cgit v1.2.3 From 94d96b60f334e662f516bd0f04cc4191d7a804e6 Mon Sep 17 00:00:00 2001 From: gfreezy Date: Sun, 20 Jan 2019 00:38:34 +0800 Subject: refactor to use `remove_range` and `replace_range` instead of TextEdit --- crates/ra_ide_api/src/completion/complete_snippet.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide_api/src/completion/complete_snippet.rs') diff --git a/crates/ra_ide_api/src/completion/complete_snippet.rs b/crates/ra_ide_api/src/completion/complete_snippet.rs index fb94e3674..4fa23bbf6 100644 --- a/crates/ra_ide_api/src/completion/complete_snippet.rs +++ b/crates/ra_ide_api/src/completion/complete_snippet.rs @@ -1,7 +1,7 @@ use crate::completion::{CompletionItem, Completions, CompletionKind, CompletionItemKind, CompletionContext, completion_item::Builder}; -fn snippet<'a>(ctx: &'a CompletionContext<'a>, label: &str, snippet: &str) -> Builder<'a> { - CompletionItem::new(CompletionKind::Snippet, ctx, label) +fn snippet(ctx: &CompletionContext, label: &str, snippet: &str) -> Builder { + CompletionItem::new(CompletionKind::Snippet, ctx.leaf_range(), label) .snippet(snippet) .kind(CompletionItemKind::Snippet) } -- cgit v1.2.3 From 2a43638052213d1faa690e6d68bd5702e44fa027 Mon Sep 17 00:00:00 2001 From: gfreezy Date: Sun, 20 Jan 2019 12:02:00 +0800 Subject: use a combination of `source_change` and `text_edit` for `CompleteItem` --- crates/ra_ide_api/src/completion/complete_snippet.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crates/ra_ide_api/src/completion/complete_snippet.rs') diff --git a/crates/ra_ide_api/src/completion/complete_snippet.rs b/crates/ra_ide_api/src/completion/complete_snippet.rs index 4fa23bbf6..d3344b865 100644 --- a/crates/ra_ide_api/src/completion/complete_snippet.rs +++ b/crates/ra_ide_api/src/completion/complete_snippet.rs @@ -1,7 +1,7 @@ use crate::completion::{CompletionItem, Completions, CompletionKind, CompletionItemKind, CompletionContext, completion_item::Builder}; fn snippet(ctx: &CompletionContext, label: &str, snippet: &str) -> Builder { - CompletionItem::new(CompletionKind::Snippet, ctx.leaf_range(), label) + CompletionItem::new(CompletionKind::Snippet, ctx.source_range(), label) .snippet(snippet) .kind(CompletionItemKind::Snippet) } -- cgit v1.2.3