Unnamed repository; edit this file 'description' to name the repository.
add find_element to syntax_edit
bit-aloo 13 days ago
parent 82c6405 · commit d33f3b5
-rw-r--r--crates/syntax/src/syntax_editor.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/crates/syntax/src/syntax_editor.rs b/crates/syntax/src/syntax_editor.rs
index edd063ffd4..e60933163f 100644
--- a/crates/syntax/src/syntax_editor.rs
+++ b/crates/syntax/src/syntax_editor.rs
@@ -216,6 +216,17 @@ impl SyntaxEdit {
pub fn find_annotation(&self, annotation: SyntaxAnnotation) -> &[SyntaxElement] {
self.annotations.get(&annotation).as_ref().map_or(&[], |it| it.as_slice())
}
+
+ pub fn find_element(&self, old_node: &SyntaxNode) -> Option<SyntaxNode> {
+ let old_root_start = self.old_root.text_range().start();
+ let old_start = old_node.text_range().start() - old_root_start;
+ let new_root_start = self.new_root.text_range().start();
+ let kind = old_node.kind();
+
+ self.new_root
+ .descendants()
+ .find(|it| it.kind() == kind && it.text_range().start() - new_root_start == old_start)
+ }
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]