From 47547e94ad89cda4dbab15b57abcf4981d101b85 Mon Sep 17 00:00:00 2001 From: RoloEdits Date: Mon, 12 May 2025 06:27:04 -0700 Subject: [PATCH] perf(statusline): reorder match and specify `u32` for `workspace_diagnostics` (#13512) --- helix-term/src/ui/statusline.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs index adf01bdad..8fb07ebe7 100644 --- a/helix-term/src/ui/statusline.rs +++ b/helix-term/src/ui/statusline.rs @@ -287,14 +287,19 @@ where { use helix_core::diagnostic::Severity; let (hints, info, warnings, errors) = context.editor.diagnostics.values().flatten().fold( - (0, 0, 0, 0), + (0u32, 0u32, 0u32, 0u32), |mut counts, (diag, _)| { match diag.severity { - Some(DiagnosticSeverity::HINT) | None => counts.0 += 1, - Some(DiagnosticSeverity::INFORMATION) => counts.1 += 1, + // PERF: For large workspace diagnostics, this loop can be very tight. + // + // Most often the diagnostics will be for warnings and errors. + // Errors should tend to be fixed fast, leaving warnings as the most common. Some(DiagnosticSeverity::WARNING) => counts.2 += 1, Some(DiagnosticSeverity::ERROR) => counts.3 += 1, - _ => {} + Some(DiagnosticSeverity::HINT) => counts.0 += 1, + Some(DiagnosticSeverity::INFORMATION) => counts.1 += 1, + // Fallback to `hint`. + _ => counts.0 += 1, } counts },