Unnamed repository; edit this file 'description' to name the repository.
perf(statusline): reorder match and specify `u32` for `workspace_diagnostics` (#13512)
| -rw-r--r-- | helix-term/src/ui/statusline.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs index adf01bda..8fb07ebe 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 }, |