tree_sitter_edit/editors/
left_biased_or.rs1use tree_sitter::{Node, Tree};
2
3use crate::editor::Editor;
4
5#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
8pub struct LeftBiasedOr<L, R>
9where
10 L: Editor,
11 R: Editor,
12{
13 pub left: L,
14 pub right: R,
15}
16
17impl<L: Editor, R: Editor> Editor for LeftBiasedOr<L, R> {
18 fn has_edit(&self, tree: &Tree, node: &Node<'_>) -> bool {
19 self.left.has_edit(tree, node) || self.right.has_edit(tree, node)
20 }
21
22 fn edit(&self, source: &[u8], tree: &Tree, node: &Node<'_>) -> Vec<u8> {
23 debug_assert!(self.has_edit(tree, node));
24 if self.left.has_edit(tree, node) {
25 self.left.edit(source, tree, node)
26 } else {
27 debug_assert!(self.right.has_edit(tree, node));
28 self.right.edit(source, tree, node)
29 }
30 }
31}