@@ -56,6 +56,8 @@ impl EditorView {
56 // TODO: this seems to prevent setting style later
56 // TODO: this seems to prevent setting style later
57 // surface.set_style(viewport, theme.get("ui.background"));
57 // surface.set_style(viewport, theme.get("ui.background"));
59+ self.render_diagnostics(&view.doc, area, surface, theme, is_focused);
59 let area = Rect::new(
61 let area = Rect::new(
60 viewport.x,
62 viewport.x,
61 viewport.y + viewport.height.saturating_sub(1),
63 viewport.y + viewport.height.saturating_sub(1),
@@ -166,7 +168,8 @@ impl EditorView {
167 // ugh,interleave highlight spans with diagnostic spans
169 // ugh,interleave highlight spans with diagnostic spans
168 let is_diagnostic = view.doc.diagnostics.iter().any(|diagnostic| {
170 let is_diagnostic = view.doc.diagnostics.iter().any(|diagnostic| {
171+ diagnostic.range.start <= char_index
169− diagnostic.range.0 <= char_index && diagnostic.range.1 > char_index
172+ && diagnostic.range.end > char_index
172 let style = if is_diagnostic {
175 let style = if is_diagnostic {
@@ -316,6 +319,60 @@ impl EditorView {
322+ pub fn render_diagnostics(
326+ surface: &mut Surface,
330+ use helix_core::diagnostic::Severity;
334+ widgets::{Paragraph, Widget},
337+ let cursor = doc.selection().cursor();
338+ let line = doc.text().char_to_line(cursor);
340+ let diagnostics = doc.diagnostics.iter().filter(|diagnostic| {
341+ diagnostic.range.start <= cursor && diagnostic.range.end >= cursor
344+ let warning: Style = theme.get("warning");
345+ let error: Style = theme.get("error");
346+ let info: Style = theme.get("info");
347+ let hint: Style = theme.get("hint");
349+ // Vec::with_capacity(diagnostics.len()); // rough estimate
350+ let mut lines = Vec::new();
351+ for diagnostic in diagnostics {
352+ let text = Text::styled(
353+ &diagnostic.message,
354+ match diagnostic.severity {
355+ Some(Severity::Error) => error,
356+ Some(Severity::Warning) | None => warning,
357+ Some(Severity::Info) => info,
358+ Some(Severity::Hint) => hint,
361+ lines.extend(text.lines);
364+ let paragraph = Paragraph::new(lines).alignment(Alignment::Right);
367+ viewport.x + viewport.width - 80 - 1,
368+ viewport.y as u16 + 1,
319 pub fn render_statusline(
376 pub fn render_statusline(
321 doc: &Document,
378 doc: &Document,