mirror of https://github.com/helix-editor/helix
Use injection syntax trees for bracket matching
Previously we used the root syntax tree for bracket matching. We can use the new functionality in `Syntax` for finding the correct syntax tree for a given byte range though so we use the correct syntax tree within injections. This improves bracket matching behavior within HTML injections like script or style tags for example.pull/9386/head
parent
9978d421fe
commit
5e0b3cc28b
|
@ -57,10 +57,10 @@ fn find_pair(
|
|||
pos_: usize,
|
||||
traverse_parents: bool,
|
||||
) -> Option<usize> {
|
||||
let tree = syntax.tree();
|
||||
let pos = doc.char_to_byte(pos_);
|
||||
|
||||
let mut node = tree.root_node().descendant_for_byte_range(pos, pos + 1)?;
|
||||
let root = syntax.tree_for_byte_range(pos, pos + 1).root_node();
|
||||
let mut node = root.descendant_for_byte_range(pos, pos + 1)?;
|
||||
|
||||
loop {
|
||||
if node.is_named() {
|
||||
|
@ -118,9 +118,7 @@ fn find_pair(
|
|||
};
|
||||
node = parent;
|
||||
}
|
||||
let node = tree
|
||||
.root_node()
|
||||
.named_descendant_for_byte_range(pos, pos + 1)?;
|
||||
let node = root.named_descendant_for_byte_range(pos, pos + 1)?;
|
||||
if node.child_count() != 0 {
|
||||
return None;
|
||||
}
|
||||
|
|
|
@ -1338,7 +1338,7 @@ impl Syntax {
|
|||
result
|
||||
}
|
||||
|
||||
pub fn descendant_for_byte_range(&self, start: usize, end: usize) -> Option<Node<'_>> {
|
||||
pub fn tree_for_byte_range(&self, start: usize, end: usize) -> &Tree {
|
||||
let mut container_id = self.root;
|
||||
|
||||
for (layer_id, layer) in self.layers.iter() {
|
||||
|
@ -1349,8 +1349,11 @@ impl Syntax {
|
|||
}
|
||||
}
|
||||
|
||||
self.layers[container_id]
|
||||
.tree()
|
||||
self.layers[container_id].tree()
|
||||
}
|
||||
|
||||
pub fn descendant_for_byte_range(&self, start: usize, end: usize) -> Option<Node<'_>> {
|
||||
self.tree_for_byte_range(start, end)
|
||||
.root_node()
|
||||
.descendant_for_byte_range(start, end)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue