diff options
author | Michael Davis | 2024-03-02 04:37:11 +0000 |
---|---|---|
committer | GitHub | 2024-03-02 04:37:11 +0000 |
commit | 5ca6a448e9b66f4f5b4caa7cd173252d0a78f92d (patch) | |
tree | a54d58501fe130c90542f4cd1adf96c4ae927b35 | |
parent | 1d6db30acf91ec1041e014650bf263defdc3feee (diff) |
Support LSP diagnostic tags (#9780)
-rw-r--r-- | book/src/themes.md | 2 | ||||
-rw-r--r-- | helix-lsp/src/client.rs | 6 | ||||
-rw-r--r-- | helix-term/src/ui/editor.rs | 15 | ||||
-rw-r--r-- | theme.toml | 2 |
4 files changed, 24 insertions, 1 deletions
diff --git a/book/src/themes.md b/book/src/themes.md index f040dfb1..04d6a69b 100644 --- a/book/src/themes.md +++ b/book/src/themes.md @@ -333,5 +333,7 @@ These scopes are used for theming the editor interface: | `diagnostic.info` | Diagnostics info (editing area) | | `diagnostic.warning` | Diagnostics warning (editing area) | | `diagnostic.error` | Diagnostics error (editing area) | +| `diagnostic.unnecessary` | Diagnostics with unnecessary tag (editing area) | +| `diagnostic.deprecated` | Diagnostics with deprecated tag (editing area) | [editor-section]: ./configuration.md#editor-section diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs index 8d03d799..a7b3989d 100644 --- a/helix-lsp/src/client.rs +++ b/helix-lsp/src/client.rs @@ -631,6 +631,12 @@ impl Client { }), publish_diagnostics: Some(lsp::PublishDiagnosticsClientCapabilities { version_support: Some(true), + tag_support: Some(lsp::TagSupport { + value_set: vec![ + lsp::DiagnosticTag::UNNECESSARY, + lsp::DiagnosticTag::DEPRECATED, + ], + }), ..Default::default() }), inlay_hint: Some(lsp::InlayHintClientCapabilities { 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() { @@ -80,6 +80,8 @@ label = "honey" "diagnostic.info" = { underline = { color = "delta", style = "curl" } } "diagnostic.warning" = { underline = { color = "lightning", style = "curl" } } "diagnostic.error" = { underline = { color = "apricot", style = "curl" } } +"diagnostic.unnecessary" = { modifiers = ["dim"] } +"diagnostic.deprecated" = { modifiers = ["crossed_out"] } warning = "lightning" error = "apricot" |