From 6bea6199b34ba7282aa148d9afcf52a8f2c7d6f5 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 7 Mar 2020 16:44:51 +0100 Subject: Fix range for postfix snippets --- crates/ra_ide/src/completion/complete_postfix.rs | 65 +++++++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) (limited to 'crates/ra_ide') diff --git a/crates/ra_ide/src/completion/complete_postfix.rs b/crates/ra_ide/src/completion/complete_postfix.rs index 8a74f993a..65ecea125 100644 --- a/crates/ra_ide/src/completion/complete_postfix.rs +++ b/crates/ra_ide/src/completion/complete_postfix.rs @@ -67,8 +67,8 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { fn postfix_snippet(ctx: &CompletionContext, label: &str, detail: &str, snippet: &str) -> Builder { let edit = { - let receiver_range = - ctx.dot_receiver.as_ref().expect("no receiver available").syntax().text_range(); + let receiver_syntax = ctx.dot_receiver.as_ref().expect("no receiver available").syntax(); + let receiver_range = ctx.sema.original_range(receiver_syntax).range; let delete_range = TextRange::from_to(receiver_range.start(), ctx.source_range().end()); TextEdit::replace(delete_range, snippet.to_string()) }; @@ -279,4 +279,65 @@ mod tests { "### ); } + + #[test] + fn works_in_simple_macro() { + assert_debug_snapshot!( + do_postfix_completion( + r#" + macro_rules! m { ($e:expr) => { $e } } + fn main() { + let bar: u8 = 12; + m!(bar.b<|>) + } + "#, + ), + @r###" + [ + CompletionItem { + label: "box", + source_range: [149; 150), + delete: [145; 150), + insert: "Box::new(bar)", + detail: "Box::new(expr)", + }, + CompletionItem { + label: "dbg", + source_range: [149; 150), + delete: [145; 150), + insert: "dbg!(bar)", + detail: "dbg!(expr)", + }, + CompletionItem { + label: "match", + source_range: [149; 150), + delete: [145; 150), + insert: "match bar {\n ${1:_} => {$0\\},\n}", + detail: "match expr {}", + }, + CompletionItem { + label: "not", + source_range: [149; 150), + delete: [145; 150), + insert: "!bar", + detail: "!expr", + }, + CompletionItem { + label: "ref", + source_range: [149; 150), + delete: [145; 150), + insert: "&bar", + detail: "&expr", + }, + CompletionItem { + label: "refm", + source_range: [149; 150), + delete: [145; 150), + insert: "&mut bar", + detail: "&mut expr", + }, + ] + "### + ); + } } -- cgit v1.2.3