From 8988c1ecc757bb4d1c2372d8b8a78bae6a1fd85e Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Tue, 20 Sep 2022 02:08:58 -0500 Subject: [PATCH] Re-sort diagnostics after transaction transform (#3895) Applying document-change transactions to diagnostic ranges is not stable with respect to the ordering of diagnostics. This can cause diagnostics to become temporarily unordered with some edits to a document, which can eventually break some invariants/assumptions in syntax::merge. With this change, Document::diagnostics are always sorted. --- helix-view/src/document.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 8ebc90027d80..2ef99c6ad136 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -788,6 +788,8 @@ impl Document { diagnostic.range.end = changes.map_pos(diagnostic.range.end, Assoc::After); diagnostic.line = self.text.char_to_line(diagnostic.range.start); } + self.diagnostics + .sort_unstable_by_key(|diagnostic| diagnostic.range); // emit lsp notification if let Some(language_server) = self.language_server() {