Stop collecting highlight_iter events then turning back into iter

This commit is contained in:
Blaž Hrastnik 2022-01-26 11:58:52 +09:00
parent 5aead46f4b
commit 62561e9d23

View File

@ -139,31 +139,34 @@ impl EditorView {
start..end
};
// TODO: range doesn't actually restrict source, just highlight range
let highlights = match doc.syntax() {
match doc.syntax() {
Some(syntax) => {
syntax
let iter = syntax
// TODO: range doesn't actually restrict source, just highlight range
.highlight_iter(text.slice(..), Some(range), None)
.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 {
// convert byte offsets to char offset
HighlightEvent::Source { start, end } => {
let start = 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 }
}
event => event,
});
.map(move |event| match event {
// convert byte offsets to char offset
HighlightEvent::Source { start, end } => {
let start =
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 }
}
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