From 5ca6a448e9b66f4f5b4caa7cd173252d0a78f92d Mon Sep 17 00:00:00 2001
From: Michael Davis
Date: Fri, 1 Mar 2024 23:37:11 -0500
Subject: Support LSP diagnostic tags (#9780)

---
 helix-term/src/ui/editor.rs | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

(limited to 'helix-term/src')

diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index dffaeea0..f3bba5d1 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -360,7 +360,7 @@ impl EditorView {
         doc: &Document,
         theme: &Theme,
     ) -> [Vec<(usize, std::ops::Range<usize>)>; 5] {
-        use helix_core::diagnostic::Severity;
+        use helix_core::diagnostic::{DiagnosticTag, Severity};
         let get_scope_of = |scope| {
             theme
             .find_scope_index_exact(scope)
@@ -380,6 +380,10 @@ impl EditorView {
         let error = get_scope_of("diagnostic.error");
         let r#default = get_scope_of("diagnostic"); // this is a bit redundant but should be fine
 
+        // Diagnostic tags
+        let unnecessary = theme.find_scope_index_exact("diagnostic.unnecessary");
+        let deprecated = theme.find_scope_index_exact("diagnostic.deprecated");
+
         let mut default_vec: Vec<(usize, std::ops::Range<usize>)> = Vec::new();
         let mut info_vec = Vec::new();
         let mut hint_vec = Vec::new();
@@ -396,6 +400,15 @@ impl EditorView {
                 _ => (&mut default_vec, r#default),
             };
 
+            let scope = diagnostic
+                .tags
+                .first()
+                .and_then(|tag| match tag {
+                    DiagnosticTag::Unnecessary => unnecessary,
+                    DiagnosticTag::Deprecated => deprecated,
+                })
+                .unwrap_or(scope);
+
             // If any diagnostic overlaps ranges with the prior diagnostic,
             // merge the two together. Otherwise push a new span.
             match vec.last_mut() {
-- 
cgit v1.2.3-70-g09d2