Skip to content

Commit 4a165b5

Browse files
committed
Make sure error triumph over warning etc.
Close #474.
1 parent 9c06800 commit 4a165b5

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/languageclient.rs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ impl State {
367367
})
368368
.collect();
369369
signs.sort_unstable();
370+
signs.dedup_by_key(|s| s.line);
370371

371372
let cmd = self.update(|state| {
372373
let signs_prev = state.signs.remove(filename).unwrap_or_default();
@@ -1663,19 +1664,24 @@ impl State {
16631664
// Unify name to avoid mismatch due to case insensitivity.
16641665
let filename = filename.canonicalize();
16651666

1666-
self.update(|state| {
1667-
state
1668-
.diagnostics
1669-
.insert(filename.clone(), params.diagnostics.clone());
1670-
Ok(())
1671-
})?;
1667+
// Make sure error comes after warning.
1668+
let mut diagnostics = params.diagnostics.clone();
1669+
diagnostics.sort_by_key(|d| {
1670+
(
1671+
d.range.start.line,
1672+
-(d.severity.map_or(4, |s| s.to_int().unwrap_or(4)) as i64),
1673+
)
1674+
});
1675+
1676+
self.diagnostics
1677+
.insert(filename.clone(), diagnostics.clone());
16721678
self.update_quickfixlist()?;
16731679

16741680
let current_filename: String = self.eval(VimVar::Filename)?;
16751681
if filename != current_filename.canonicalize() {
16761682
return Ok(());
16771683
}
1678-
self.display_diagnostics(&current_filename, &params.diagnostics)?;
1684+
self.display_diagnostics(&current_filename, &diagnostics)?;
16791685
self.call::<_, u8>(None, "s:ExecuteAutocmd", "LanguageClientDiagnosticsChanged")?;
16801686

16811687
info!("End {}", lsp::notification::PublishDiagnostics::METHOD);

0 commit comments

Comments
 (0)