aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--helix-term/src/application.rs4
-rw-r--r--helix-view/src/document.rs18
2 files changed, 17 insertions, 5 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 2dd97b42..3abe9cae 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -907,7 +907,9 @@ impl Application {
// Sort diagnostics first by severity and then by line numbers.
// Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
- diagnostics.sort_unstable_by_key(|(d, _)| (d.severity, d.range.start));
+ diagnostics.sort_unstable_by_key(|(d, server_id)| {
+ (d.severity, d.range.start, *server_id)
+ });
}
Notification::ShowMessage(params) => {
log::warn!("unhandled window/showMessage: {:?}", params);
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index b4971c8a..af950a3f 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -1240,8 +1240,13 @@ impl Document {
true
});
- self.diagnostics
- .sort_unstable_by_key(|diagnostic| diagnostic.range);
+ self.diagnostics.sort_unstable_by_key(|diagnostic| {
+ (
+ diagnostic.range,
+ diagnostic.severity,
+ diagnostic.language_server_id,
+ )
+ });
// Update the inlay hint annotations' positions, helping ensure they are displayed in the proper place
let apply_inlay_hint_changes = |annotations: &mut Rc<[InlineAnnotation]>| {
@@ -1738,8 +1743,13 @@ impl Document {
});
}
self.diagnostics.extend(diagnostics);
- self.diagnostics
- .sort_unstable_by_key(|diagnostic| diagnostic.range);
+ self.diagnostics.sort_unstable_by_key(|diagnostic| {
+ (
+ diagnostic.range,
+ diagnostic.severity,
+ diagnostic.language_server_id,
+ )
+ });
}
pub fn clear_diagnostics(&mut self, language_server_id: usize) {