From 467af611fb5b1add25b36a2127b172240bc141cf Mon Sep 17 00:00:00 2001 From: David Lattimore Date: Mon, 22 Jun 2020 18:15:51 +1000 Subject: SSR: Allow matching of whole macro calls Matching within macro calls is to come later and matching of macro calls within macro calls later still. --- crates/ra_ssr/src/replacing.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'crates/ra_ssr/src/replacing.rs') diff --git a/crates/ra_ssr/src/replacing.rs b/crates/ra_ssr/src/replacing.rs index 81a5e06a9..5dcde82a2 100644 --- a/crates/ra_ssr/src/replacing.rs +++ b/crates/ra_ssr/src/replacing.rs @@ -24,6 +24,7 @@ fn matches_to_edit_at_offset(matches: &SsrMatches, relative_start: TextSize) -> fn render_replace(match_info: &Match) -> String { let mut out = String::new(); + let match_start = match_info.matched_node.text_range().start(); for r in &match_info.template.tokens { match r { PatternElement::Token(t) => out.push_str(t.text.as_str()), @@ -32,7 +33,14 @@ fn render_replace(match_info: &Match) -> String { match_info.placeholder_values.get(&Var(p.ident.to_string())) { let range = &placeholder_value.range.range; - let mut matched_text = placeholder_value.node.text().to_string(); + let mut matched_text = if let Some(node) = &placeholder_value.node { + node.text().to_string() + } else { + let relative_range = range.checked_sub(match_start).unwrap(); + match_info.matched_node.text().to_string() + [usize::from(relative_range.start())..usize::from(relative_range.end())] + .to_string() + }; let edit = matches_to_edit_at_offset(&placeholder_value.inner_matches, range.start()); edit.apply(&mut matched_text); -- cgit v1.2.3