diff options
author | David Lattimore <[email protected]> | 2020-06-22 09:15:51 +0100 |
---|---|---|
committer | David Lattimore <[email protected]> | 2020-06-22 22:42:34 +0100 |
commit | 467af611fb5b1add25b36a2127b172240bc141cf (patch) | |
tree | 099d64f5095a74fd118266f0f96efa31412910d4 /crates/ra_ssr/src/replacing.rs | |
parent | d8842e89e9053b62c081d2995cbf43b8fd5c51b2 (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.rs | 10 |
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 | ||
25 | fn render_replace(match_info: &Match) -> String { | 25 | fn 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); |