diff --git a/helix-view/src/gutter.rs b/helix-view/src/gutter.rs index eb6796be..05fec758 100644 --- a/helix-view/src/gutter.rs +++ b/helix-view/src/gutter.rs @@ -26,7 +26,18 @@ pub fn diagnostic<'doc>( Box::new(move |line: usize, _selected: bool, out: &mut String| { use helix_core::diagnostic::Severity; if let Ok(index) = diagnostics.binary_search_by_key(&line, |d| d.line) { - let diagnostic = &diagnostics[index]; + let after = diagnostics[index..].iter().take_while(|d| d.line == line); + + let before = diagnostics[..index] + .iter() + .rev() + .take_while(|d| d.line == line); + + let diagnostics_on_line = after.chain(before); + + // This unwrap is safe because the iterator cannot be empty as it contains at least the item found by the binary search. + let diagnostic = diagnostics_on_line.max_by_key(|d| d.severity).unwrap(); + write!(out, "●").unwrap(); return Some(match diagnostic.severity { Some(Severity::Error) => error,