From 0c104685c024a03cd857c0adcedea55b694eb604 Mon Sep 17 00:00:00 2001
From: Gokul Soumya <gokulps15@gmail.com>
Date: Tue, 5 Jul 2022 17:42:14 +0530
Subject: [PATCH] Sub sort diagnostics by line number

---
 helix-term/src/application.rs | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index df14f5e3..d3899075 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -572,15 +572,11 @@ impl Application {
                             doc.set_diagnostics(diagnostics);
                         }
 
-                        // Sort diagnostics first by URL and then by severity.
+                        // Sort diagnostics first by severity and then by line numbers.
                         // Note: The `lsp::DiagnosticSeverity` enum is already defined in decreasing order
-                        params.diagnostics.sort_unstable_by(|a, b| {
-                            if let (Some(a), Some(b)) = (a.severity, b.severity) {
-                                a.partial_cmp(&b).unwrap()
-                            } else {
-                                std::cmp::Ordering::Equal
-                            }
-                        });
+                        params
+                            .diagnostics
+                            .sort_unstable_by_key(|d| (d.severity, d.range.start));
 
                         // Insert the original lsp::Diagnostics here because we may have no open document
                         // for diagnosic message and so we can't calculate the exact position.