From 89887ddbc62fdd7b90b98597de48b753aa0d4e55 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 07:41:40 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9A=A1=20Bolt:=20[Performance]=20Avoid?= =?UTF-8?q?=20string=20array=20allocations=20in=20CollapseToSingleLine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Optimized `CollapseToSingleLine` in `ShortcutDisplay.cs` by replacing `string.Split()` with `AsSpan().SplitAny()`. This eliminates `string[]` allocations and intermediate strings, using a `StringBuilder` directly instead, thereby reducing GC overhead while preserving the exact semantic behavior. --- QuickShell.Core/Services/ShortcutDisplay.cs | 37 ++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/QuickShell.Core/Services/ShortcutDisplay.cs b/QuickShell.Core/Services/ShortcutDisplay.cs index 54b0fd8e..32667a97 100644 --- a/QuickShell.Core/Services/ShortcutDisplay.cs +++ b/QuickShell.Core/Services/ShortcutDisplay.cs @@ -105,10 +105,39 @@ private static bool AnyLaunchHasCommand(IEnumerable launches) => private static string ShortenPath(string path) => ShortenPathForDisplay(path); - private static string CollapseToSingleLine(string? value) => - string.Join( - ' ', - (value ?? string.Empty).Split(['\r', '\n', '\t'], StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)); + private static string CollapseToSingleLine(string? value) + { + if (string.IsNullOrWhiteSpace(value)) + { + return string.Empty; + } + + var span = value.AsSpan(); + if (span.IndexOfAny('\r', '\n', '\t') < 0) + { + return value.Trim(); + } + + // Bolt: Performance optimization - use AsSpan().SplitAny() to avoid string array allocations from string.Split() + var builder = new System.Text.StringBuilder(span.Length); + var first = true; + foreach (var range in span.SplitAny('\r', '\n', '\t')) + { + var part = span[range].Trim(); + if (!part.IsEmpty) + { + if (!first) + { + builder.Append(' '); + } + + builder.Append(part); + first = false; + } + } + + return builder.ToString(); + } private static string Truncate(string value, int maximumLength) => value.Length <= maximumLength ? value : value[..(maximumLength - 1)] + "…"; From 6ec1facc85e970cc776a4a98670f7528279ca7a8 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 07:47:16 +0000 Subject: [PATCH 2/3] Fix CI error on Linux by enabling Windows targeting in Directory.Build.props --- Directory.Build.props | 1 + 1 file changed, 1 insertion(+) diff --git a/Directory.Build.props b/Directory.Build.props index 16cac6c6..6c9f2479 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,6 +11,7 @@ direct $(Platform) $(MSBuildThisFileDirectory)..\PowerToys\src\modules\cmdpal\extensionsdk\Microsoft.CommandPalette.Extensions.Toolkit\Microsoft.CommandPalette.Extensions.Toolkit.csproj + true false From e14a2ecb5ba7b432a3209133f5d4dac2a649def8 Mon Sep 17 00:00:00 2001 From: Anthony Thompson Date: Tue, 28 Jul 2026 17:38:11 -0700 Subject: [PATCH 3/3] Potential fix for pull request finding 'CodeQL / Useless assignment to local variable' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Signed-off-by: Anthony Thompson --- QuickShell.Core/Services/ShortcutDisplay.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/QuickShell.Core/Services/ShortcutDisplay.cs b/QuickShell.Core/Services/ShortcutDisplay.cs index 32667a97..89f5e9e7 100644 --- a/QuickShell.Core/Services/ShortcutDisplay.cs +++ b/QuickShell.Core/Services/ShortcutDisplay.cs @@ -118,12 +118,20 @@ private static string CollapseToSingleLine(string? value) return value.Trim(); } - // Bolt: Performance optimization - use AsSpan().SplitAny() to avoid string array allocations from string.Split() + // Bolt: Performance optimization - avoid string.Split() allocations; scan separators directly over the span. var builder = new System.Text.StringBuilder(span.Length); var first = true; - foreach (var range in span.SplitAny('\r', '\n', '\t')) + var segmentStart = 0; + + for (var i = 0; i <= span.Length; i++) { - var part = span[range].Trim(); + var atEnd = i == span.Length; + if (!atEnd && span[i] != '\r' && span[i] != '\n' && span[i] != '\t') + { + continue; + } + + var part = span[segmentStart..i].Trim(); if (!part.IsEmpty) { if (!first) @@ -134,6 +142,8 @@ private static string CollapseToSingleLine(string? value) builder.Append(part); first = false; } + + segmentStart = i + 1; } return builder.ToString();