Stop collecting highlight_iter events then turning back into iter

pull/1606/head
Blaž Hrastnik 3 years ago
parent 5aead46f4b
commit 62561e9d23

@ -139,31 +139,34 @@ impl EditorView {
start..end start..end
}; };
// TODO: range doesn't actually restrict source, just highlight range match doc.syntax() {
let highlights = match doc.syntax() {
Some(syntax) => { Some(syntax) => {
syntax let iter = syntax
// TODO: range doesn't actually restrict source, just highlight range
.highlight_iter(text.slice(..), Some(range), None) .highlight_iter(text.slice(..), Some(range), None)
.map(|event| event.unwrap()) .map(|event| event.unwrap())
.collect() // TODO: we collect here to avoid holding the lock, fix later
}
None => vec![HighlightEvent::Source {
start: range.start,
end: range.end,
}],
}
.into_iter()
.map(move |event| match event { .map(move |event| match event {
// convert byte offsets to char offset // convert byte offsets to char offset
HighlightEvent::Source { start, end } => { HighlightEvent::Source { start, end } => {
let start = text.byte_to_char(ensure_grapheme_boundary_next_byte(text, start)); let start =
let end = text.byte_to_char(ensure_grapheme_boundary_next_byte(text, end)); text.byte_to_char(ensure_grapheme_boundary_next_byte(text, start));
let end =
text.byte_to_char(ensure_grapheme_boundary_next_byte(text, end));
HighlightEvent::Source { start, end } HighlightEvent::Source { start, end }
} }
event => event, event => event,
}); });
Box::new(highlights) Box::new(iter)
}
None => Box::new(
[HighlightEvent::Source {
start: text.byte_to_char(range.start),
end: text.byte_to_char(range.end),
}]
.into_iter(),
),
}
} }
/// Get highlight spans for document diagnostics /// Get highlight spans for document diagnostics

Loading…
Cancel
Save