mirror of
https://github.com/helix-editor/helix.git
synced 2024-08-17 06:40:47 +03:00
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.
This commit is contained in:
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 @@ pub fn highlight_iter<'a>(
|
||||
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 @@ pub fn descendant_for_byte_range(&self, start: usize, end: usize) -> Option<Node
|
||||
}
|
||||
}
|
||||
|
||||
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
Block a user