From b0528bbac4397037f2c3c73a4e4857938a81b7d9 Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Wed, 14 May 2025 17:16:55 -0400 Subject: [PATCH] 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. --- helix-term/src/ui/statusline.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs index 8fb07ebe7..117483e26 100644 --- a/helix-term/src/ui/statusline.rs +++ b/helix-term/src/ui/statusline.rs @@ -305,11 +305,21 @@ where }, ); - 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(