aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ssr/src/replacing.rs
diff options
context:
space:
mode:
authorDavid Lattimore <[email protected]>2020-06-22 09:15:51 +0100
committerDavid Lattimore <[email protected]>2020-06-22 22:42:34 +0100
commit467af611fb5b1add25b36a2127b172240bc141cf (patch)
tree099d64f5095a74fd118266f0f96efa31412910d4 /crates/ra_ssr/src/replacing.rs
parentd8842e89e9053b62c081d2995cbf43b8fd5c51b2 (diff)
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.
Diffstat (limited to 'crates/ra_ssr/src/replacing.rs')
-rw-r--r--crates/ra_ssr/src/replacing.rs10
1 files changed, 9 insertions, 1 deletions
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) ->
24 24
25fn render_replace(match_info: &Match) -> String { 25fn render_replace(match_info: &Match) -> String {
26 let mut out = String::new(); 26 let mut out = String::new();
27 let match_start = match_info.matched_node.text_range().start();
27 for r in &match_info.template.tokens { 28 for r in &match_info.template.tokens {
28 match r { 29 match r {
29 PatternElement::Token(t) => out.push_str(t.text.as_str()), 30 PatternElement::Token(t) => out.push_str(t.text.as_str()),
@@ -32,7 +33,14 @@ fn render_replace(match_info: &Match) -> String {
32 match_info.placeholder_values.get(&Var(p.ident.to_string())) 33 match_info.placeholder_values.get(&Var(p.ident.to_string()))
33 { 34 {
34 let range = &placeholder_value.range.range; 35 let range = &placeholder_value.range.range;
35 let mut matched_text = placeholder_value.node.text().to_string(); 36 let mut matched_text = if let Some(node) = &placeholder_value.node {
37 node.text().to_string()
38 } else {
39 let relative_range = range.checked_sub(match_start).unwrap();
40 match_info.matched_node.text().to_string()
41 [usize::from(relative_range.start())..usize::from(relative_range.end())]
42 .to_string()
43 };
36 let edit = 44 let edit =
37 matches_to_edit_at_offset(&placeholder_value.inner_matches, range.start()); 45 matches_to_edit_at_offset(&placeholder_value.inner_matches, range.start());
38 edit.apply(&mut matched_text); 46 edit.apply(&mut matched_text);