diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index 8fda29352..6b52ee40a 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -2475,15 +2475,17 @@ impl<'a> Iterator for HighlightIter<'a> { } } - // Once a highlighting pattern is found for the current node, skip over - // any later highlighting patterns that also match this node. Captures + // Use the last capture found for the current node, skipping over any + // highlight patterns that also match this node. Captures // for a given node are ordered by pattern index, so these subsequent // captures are guaranteed to be for highlighting, not injections or // local variables. while let Some((next_match, next_capture_index)) = captures.peek() { let next_capture = next_match.captures[*next_capture_index]; if next_capture.node == capture.node { - captures.next(); + match_.remove(); + capture = next_capture; + match_ = captures.next().unwrap().0; } else { break; }