From 4da6191a1c821eaff580392b41a2eb7245a475b7 Mon Sep 17 00:00:00 2001
From: Pascal Kuthe <pascal.kuthe@semimod.de>
Date: Tue, 9 Jan 2024 01:54:55 +0100
Subject: [PATCH] don't automatically dismiss zero width diagnostics (#9280)

---
 helix-view/src/document.rs | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index af950a3f..51668ab1 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -1222,18 +1222,23 @@ impl Document {
                 };
                 (&mut diagnostic.range.start, assoc)
             }));
-            changes.update_positions(self.diagnostics.iter_mut().map(|diagnostic| {
+            changes.update_positions(self.diagnostics.iter_mut().filter_map(|diagnostic| {
+                if diagnostic.zero_width {
+                    // for zero width diagnostics treat the diagnostic as a point
+                    // rather than a range
+                    return None;
+                }
                 let assoc = if diagnostic.ends_at_word {
                     Assoc::AfterWord
                 } else {
                     Assoc::Before
                 };
-                (&mut diagnostic.range.end, assoc)
+                Some((&mut diagnostic.range.end, assoc))
             }));
             self.diagnostics.retain_mut(|diagnostic| {
-                if diagnostic.range.start > diagnostic.range.end
-                    || (!diagnostic.zero_width && diagnostic.range.start == diagnostic.range.end)
-                {
+                if diagnostic.zero_width {
+                    diagnostic.range.end = diagnostic.range.start
+                } else if diagnostic.range.start >= diagnostic.range.end {
                     return false;
                 }
                 diagnostic.line = self.text.char_to_line(diagnostic.range.start);