From b120515613ba24aff224d093b28d85049c774cad Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Sat, 19 Sep 2020 11:55:42 +0900 Subject: Range based highlight_iter. Only works on limiting the start right now --- helix-core/src/syntax.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'helix-core/src') diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index 1eb15633..8b55fc3e 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -77,6 +77,7 @@ impl Syntax { pub fn highlight_iter<'a>( &'a mut self, source: &'a [u8], + range: Option>, cancellation_flag: Option<&'a AtomicUsize>, mut injection_callback: impl FnMut(&str) -> Option<&'a HighlightConfiguration> + 'a, ) -> Result> + 'a, Error> { @@ -90,6 +91,12 @@ impl Syntax { let query_ref = unsafe { mem::transmute::<_, &'static mut Query>(&mut self.config.query) }; let config_ref = unsafe { mem::transmute::<_, &'static HighlightConfiguration>(&self.config) }; + + // TODO: if reusing cursors this might need resetting + if let Some(range) = &range { + cursor_ref.set_byte_range(range.start, range.end); + } + let captures = cursor_ref .captures(query_ref, tree_ref.root_node(), move |n: Node| { &source[n.byte_range()] @@ -119,7 +126,7 @@ impl Syntax { let mut result = HighlightIter { source, - byte_offset: 0, + byte_offset: range.map(|r| r.start).unwrap_or(0), // TODO: simplify injection_callback, cancellation_flag, highlighter: self, @@ -1098,7 +1105,8 @@ where layer.highlight_end_stack.pop(); return self.emit_event(end_byte, Some(HighlightEvent::HighlightEnd)); } else { - return self.emit_event(self.source.len(), None); + // return self.emit_event(self.source.len(), None); + return None; }; let (mut match_, capture_index) = layer.captures.next().unwrap(); -- cgit v1.2.3-70-g09d2