From a04cababaa144d7a6db7b1dd114494b33d281ab9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 20 May 2020 01:53:21 +0200 Subject: Use snippets in add_missing_members --- crates/ra_assists/src/utils.rs | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'crates/ra_assists/src/utils.rs') diff --git a/crates/ra_assists/src/utils.rs b/crates/ra_assists/src/utils.rs index 8a26a6808..9af27180b 100644 --- a/crates/ra_assists/src/utils.rs +++ b/crates/ra_assists/src/utils.rs @@ -15,18 +15,31 @@ use crate::assist_config::SnippetCap; pub(crate) use insert_use::insert_use_statement; -pub(crate) fn render_snippet( - _cap: SnippetCap, - node: &SyntaxNode, - placeholder: &SyntaxNode, -) -> String { - assert!(placeholder.ancestors().any(|it| it == *node)); - let range = placeholder.text_range() - node.text_range().start(); +#[derive(Clone, Copy, Debug)] +pub(crate) enum Cursor<'a> { + Replace(&'a SyntaxNode), + Before(&'a SyntaxNode), +} + +impl<'a> Cursor<'a> { + fn node(self) -> &'a SyntaxNode { + match self { + Cursor::Replace(node) | Cursor::Before(node) => node, + } + } +} + +pub(crate) fn render_snippet(_cap: SnippetCap, node: &SyntaxNode, cursor: Cursor) -> String { + assert!(cursor.node().ancestors().any(|it| it == *node)); + let range = cursor.node().text_range() - node.text_range().start(); let range: ops::Range = range.into(); - let mut placeholder = placeholder.to_string(); + let mut placeholder = cursor.node().to_string(); escape(&mut placeholder); - let tab_stop = format!("${{0:{}}}", placeholder); + let tab_stop = match cursor { + Cursor::Replace(placeholder) => format!("${{0:{}}}", placeholder), + Cursor::Before(placeholder) => format!("$0{}", placeholder), + }; let mut buf = node.to_string(); buf.replace_range(range, &tab_stop); -- cgit v1.2.3