From 0650f77dd9defaf352f81c5ee4ee73a1eae942b7 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 10 May 2021 19:04:41 +0300 Subject: internal: remove one more immutable tree --- crates/syntax/src/algo.rs | 35 ++++------------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) (limited to 'crates/syntax/src/algo.rs') diff --git a/crates/syntax/src/algo.rs b/crates/syntax/src/algo.rs index 3f9b84ab9..825ea3185 100644 --- a/crates/syntax/src/algo.rs +++ b/crates/syntax/src/algo.rs @@ -337,7 +337,7 @@ enum InsertPos { } #[derive(Default)] -pub struct SyntaxRewriter<'a> { +pub(crate) struct SyntaxRewriter<'a> { //FIXME: add debug_assertions that all elements are in fact from the same file. replacements: FxHashMap, insertions: IndexMap>, @@ -354,13 +354,13 @@ impl fmt::Debug for SyntaxRewriter<'_> { } impl SyntaxRewriter<'_> { - pub fn replace>(&mut self, what: &T, with: &T) { + pub(crate) fn replace>(&mut self, what: &T, with: &T) { let what = what.clone().into(); let replacement = Replacement::Single(with.clone().into()); self.replacements.insert(what, replacement); } - pub fn rewrite(&self, node: &SyntaxNode) -> SyntaxNode { + pub(crate) fn rewrite(&self, node: &SyntaxNode) -> SyntaxNode { let _p = profile::span("rewrite"); if self.replacements.is_empty() && self.insertions.is_empty() { @@ -370,37 +370,10 @@ impl SyntaxRewriter<'_> { with_green(node, green) } - pub fn rewrite_ast(self, node: &N) -> N { + pub(crate) fn rewrite_ast(self, node: &N) -> N { N::cast(self.rewrite(node.syntax())).unwrap() } - /// Returns a node that encompasses all replacements to be done by this rewriter. - /// - /// Passing the returned node to `rewrite` will apply all replacements queued up in `self`. - /// - /// Returns `None` when there are no replacements. - pub fn rewrite_root(&self) -> Option { - let _p = profile::span("rewrite_root"); - fn element_to_node_or_parent(element: &SyntaxElement) -> Option { - match element { - SyntaxElement::Node(it) => Some(it.clone()), - SyntaxElement::Token(it) => it.parent(), - } - } - - self.replacements - .keys() - .filter_map(element_to_node_or_parent) - .chain(self.insertions.keys().filter_map(|pos| match pos { - InsertPos::FirstChildOf(it) => Some(it.clone()), - InsertPos::After(it) => element_to_node_or_parent(it), - })) - // If we only have one replacement/insertion, we must return its parent node, since `rewrite` does - // not replace the node passed to it. - .map(|it| it.parent().unwrap_or(it)) - .fold1(|a, b| least_common_ancestor(&a, &b).unwrap()) - } - fn replacement(&self, element: &SyntaxElement) -> Option { self.replacements.get(element).cloned() } -- cgit v1.2.3