mirror of https://github.com/helix-editor/helix
Display highest severity diagnostic in gutter (#2835)
* Display highest severity diagnostic in gutter * Improve gutter diagnostic performance Very slight improvement (doesn't really make a difference), iterates over the diagnostics of the line once instead of twice. * Add comment justifying unwrappull/2263/merge
parent
009f8c4d3b
commit
43027d9104
|
@ -26,7 +26,18 @@ pub fn diagnostic<'doc>(
|
||||||
Box::new(move |line: usize, _selected: bool, out: &mut String| {
|
Box::new(move |line: usize, _selected: bool, out: &mut String| {
|
||||||
use helix_core::diagnostic::Severity;
|
use helix_core::diagnostic::Severity;
|
||||||
if let Ok(index) = diagnostics.binary_search_by_key(&line, |d| d.line) {
|
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();
|
write!(out, "●").unwrap();
|
||||||
return Some(match diagnostic.severity {
|
return Some(match diagnostic.severity {
|
||||||
Some(Severity::Error) => error,
|
Some(Severity::Error) => error,
|
||||||
|
|
Loading…
Reference in New Issue