Mercurial > forks > helix
changeset 6793:53795d518b8b
statusline: Avoid showing only 'W' in workspace-diagnostics element
If you configure a subset of severities to show in the workspace
diagnostics statusline element you can see the 'W' (and surrounding
space) without any diagnostic indicators. This is the case by default
as it's configured to show warnings and errors only - if you have only
hints in your workspace like if you open `application.rs` in Helix for
example then you would see the 'W' and no indicators.
This change checks that any of the configured diagnostics are non-zero
and bails early if there are none.
author | Michael Davis <mcarsondavis@gmail.com> |
---|---|
date | Wed, 14 May 2025 17:16:55 -0400 |
parents | 176f68aecad1 |
children | 1ccfcf48201f |
files | helix-term/src/ui/statusline.rs |
diffstat | 1 files changed, 13 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/helix-term/src/ui/statusline.rs Wed May 14 16:29:27 2025 -0400 +++ b/helix-term/src/ui/statusline.rs Wed May 14 17:16:55 2025 -0400 @@ -305,11 +305,21 @@ }, ); - if hints > 0 || info > 0 || warnings > 0 || errors > 0 { - write(context, " W ".into(), None); + let sevs_to_show = &context.editor.config().statusline.workspace_diagnostics; + + // Avoid showing the " W " if no diagnostic counts will be shown. + if !sevs_to_show.iter().any(|sev| match sev { + Severity::Hint => hints != 0, + Severity::Info => info != 0, + Severity::Warning => warnings != 0, + Severity::Error => errors != 0, + }) { + return; } - for sev in &context.editor.config().statusline.workspace_diagnostics { + write(context, " W ".into(), None); + + for sev in sevs_to_show { match sev { Severity::Hint if hints > 0 => { write(