Turn diagnostics rendering into span injection too

This commit is contained in:
Blaž Hrastnik 2021-06-27 00:14:59 +09:00
parent 90d675fb15
commit f9cdb2afe2
2 changed files with 16 additions and 12 deletions

View File

@ -340,6 +340,20 @@ pub fn render_buffer(
Box::new(highlights)
};
// diagnostic injection
let diagnostic_scope = theme.find_scope_index("diagnostic").unwrap_or(cursor_scope);
let spans_ = doc
.diagnostics()
.iter()
.map(|diagnostic| {
(
diagnostic_scope,
diagnostic.range.start..diagnostic.range.end,
)
})
.collect();
let highlights = Box::new(merge(highlights, spans_));
'outer: for event in highlights {
match event {
HighlightEvent::HighlightStart(span) => {
@ -412,18 +426,6 @@ pub fn render_buffer(
continue;
}
// ugh,interleave highlight spans with diagnostic spans
let is_diagnostic = doc.diagnostics().iter().any(|diagnostic| {
diagnostic.range.start <= char_index
&& diagnostic.range.end > char_index
});
let style = if is_diagnostic {
style.add_modifier(Modifier::UNDERLINED)
} else {
style
};
surface.set_string(
viewport.x + visual_x - view.first_col as u16,
viewport.y + line,

View File

@ -60,6 +60,8 @@
"ui.menu.selected" = { fg = "#281733", bg = "#ffffff" } # revolver
"diagnostic" = { modifiers = ["underlined"] }
"warning" = "#ffcd1c"
"error" = "#f47868"
"info" = "#6F44F0"