tree_sitter_edit/editors/
delete.rs1use crate::traversal::{traverse, Order};
2use tree_sitter::{Node, Tree};
3
4use crate::editor::{Edit, Editor};
5use crate::id::NodeId;
6
7#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
9pub struct Delete {
10 id: NodeId,
11}
12
13impl Delete {
14 #[must_use]
15 pub fn new(id: NodeId) -> Self {
16 Delete { id }
17 }
18}
19
20impl Editor for Delete {
21 fn has_edit(&self, _tree: &Tree, node: &Node<'_>) -> bool {
22 self.id.is(node)
23 }
24
25 fn edit(&self, _source: &[u8], tree: &Tree, node: &Node<'_>) -> Vec<u8> {
26 debug_assert!(self.has_edit(tree, node));
27 Vec::new()
28 }
29
30 fn in_order_edits(&self, _source: &[u8], tree: &Tree) -> Box<dyn Iterator<Item = Edit> + '_> {
31 if let Some(node) = traverse(tree.walk(), Order::Pre).find(|n| NodeId::new(n) == self.id) {
32 Box::new(std::iter::once(Edit {
33 position: node.start_byte(),
34 delete: node.end_byte() - node.start_byte(),
35 insert: Vec::new(),
36 }))
37 } else {
38 Box::new(std::iter::empty())
39 }
40 }
41}