diff options
author | Robert Walter | 2022-05-20 01:30:28 +0000 |
---|---|---|
committer | GitHub | 2022-05-20 01:30:28 +0000 |
commit | 776686ab2471419b9c9aac8507e8d301f450389a (patch) | |
tree | fb9c6ca38dda82e94d8917ef3d9d93c50e20bce8 /helix-term/src/ui | |
parent | 09f9f70576830c328af37b73f96286d80ecf20f9 (diff) |
Separate colors for different diagnostics types (#2437)
* feat(theme): add separate diagnostic colors
This commit adds separate diagnostic highlight colors for the different
types of LSP severities. If the severity type doesn't exist or is
unknown, we use some fallback coloring which was in use before this
commit.
Some initial color options were also added in the theme.toml
Resolves issue #2157
* feat(theme): add docs for new diagnostic options
* feat(theme): adjust defaults & reduce redundancy
- the different colors for different diagnostic severities are now
disabled in the default theme, instead diagnostics are just generally
underlined (as prior to the changes of this feature)
- the theme querying is now done once instead of every iteration in the
loop of processing every diagnostic message
Diffstat (limited to 'helix-term/src/ui')
-rw-r--r-- | helix-term/src/ui/editor.rs | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 52e58163..85028e2f 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -247,17 +247,36 @@ impl EditorView { doc: &Document, theme: &Theme, ) -> Vec<(usize, std::ops::Range<usize>)> { - let diagnostic_scope = theme - .find_scope_index("diagnostic") + use helix_core::diagnostic::Severity; + let get_scope_of = |scope| { + theme + .find_scope_index(scope) + // get one of the themes below as fallback values + .or_else(|| theme.find_scope_index("diagnostic")) .or_else(|| theme.find_scope_index("ui.cursor")) .or_else(|| theme.find_scope_index("ui.selection")) .expect( "at least one of the following scopes must be defined in the theme: `diagnostic`, `ui.cursor`, or `ui.selection`", - ); + ) + }; + + // basically just queries the theme color defined in the config + let hint = get_scope_of("diagnostic.hint"); + let info = get_scope_of("diagnostic.info"); + let warning = get_scope_of("diagnostic.warning"); + let error = get_scope_of("diagnostic.error"); + let r#default = get_scope_of("diagnostic"); // this is a bit redundant but should be fine doc.diagnostics() .iter() .map(|diagnostic| { + let diagnostic_scope = match diagnostic.severity { + Some(Severity::Info) => info, + Some(Severity::Hint) => hint, + Some(Severity::Warning) => warning, + Some(Severity::Error) => error, + _ => r#default, + }; ( diagnostic_scope, diagnostic.range.start..diagnostic.range.end, |