aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Davis2024-01-25 19:05:42 +0000
committerBlaž Hrastnik2024-01-28 09:13:33 +0000
commit5e0b3cc28b8ae6da1f41b47080a695c99bbc844a (patch)
tree9c20789f2d2aaa2ec691f3b3790c3eabf8b92955
parent9978d421fe7237c74932c34263d91445728d65d1 (diff)
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.
-rw-r--r--helix-core/src/match_brackets.rs8
-rw-r--r--helix-core/src/syntax.rs9
2 files changed, 9 insertions, 8 deletions
diff --git a/helix-core/src/match_brackets.rs b/helix-core/src/match_brackets.rs
index 150679b5..b8bcc28c 100644
--- a/helix-core/src/match_brackets.rs
+++ b/helix-core/src/match_brackets.rs
@@ -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;
}
diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs
index a5a85c57..a403e7cc 100644
--- a/helix-core/src/syntax.rs
+++ b/helix-core/src/syntax.rs
@@ -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)
}