From a3a0d630bb8a8f8c934bcc511d1cab8e3621cf6d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 05:21:43 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Optimize=20hasSelection=20w?= =?UTF-8?q?ith=20short-circuit=20evaluation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: acebytes <2820910+acebytes@users.noreply.github.com> --- Sources/Cacheout/ViewModels/CacheoutViewModel.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Sources/Cacheout/ViewModels/CacheoutViewModel.swift b/Sources/Cacheout/ViewModels/CacheoutViewModel.swift index 27de41a..003a7ef 100644 --- a/Sources/Cacheout/ViewModels/CacheoutViewModel.swift +++ b/Sources/Cacheout/ViewModels/CacheoutViewModel.swift @@ -118,7 +118,12 @@ class CacheoutViewModel: ObservableObject { } var hasResults: Bool { !scanResults.isEmpty || !nodeModulesItems.isEmpty } - var hasSelection: Bool { !selectedResults.isEmpty || selectedNodeModulesSize > 0 } + var hasSelection: Bool { + // ⚡ Bolt Optimization: Use contains(where:) to short-circuit evaluation instead of + // allocating an intermediate filtered array (!selectedResults.isEmpty) or computing + // the total size of all selected items (selectedNodeModulesSize > 0). O(1) early exit vs O(N). + scanResults.contains(where: \.isSelected) || nodeModulesItems.contains(where: \.isSelected) + } // MARK: - Node Modules computed properties