From a7c5437b151ba4f86d6c15f9ef77e9d8957b7c5c Mon Sep 17 00:00:00 2001 From: cmux Date: Fri, 26 Jun 2026 01:13:50 -0700 Subject: [PATCH 1/3] Fix sidebar row-height layout-feedback livelock (#6556) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `SidebarWorkspaceGroupHeaderView` and `ContentView`'s `TabItemView` each measured their row height with a `GeometryReader` whose `onAppear`/`onChange` closures wrote `@State rowHeight` from inside the layout pass. Writing layout-derived `@State` mid-layout retriggers the SwiftUI AttributeGraph and reproduces the `StackLayout.sizeThatFits` / `ViewLayoutEngine.sizeThatFits` re-render livelock documented in #2586 / #5764 / #6556 (a `cpu_resource.diag` showed 52% CPU sustained over 173s under high workspace counts). PR #6111 intended to remove this pattern, but #4385 re-introduced it in the group header and the `TabItemView` wiring was never updated. A prior attempt (#6558) replaced the measured height with an arithmetic estimate and was reverted (#6625) because the estimate diverged from real content and made rows render too wide/tall. This redo keeps the exact measured height — so drag/drop pointer-edge metrics and visual layout are unchanged — but moves the write out of the layout pass using the established preference-key pattern (matches `BrowserAddressBarHeightPreferenceKey`): a passive `GeometryReader` publishes the height through `SidebarRowHeightPreferenceKey`, and `onPreferenceChange` applies it after layout settles. No `@State` is written from inside a `GeometryReader` anymore. Co-Authored-By: Claude Opus 4.8 (1M context) --- Sources/ContentView.swift | 17 ++---- Sources/SidebarWorkspaceGroupHeaderView.swift | 53 ++++++++++++++----- 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index ac3cff00d88b..8887ce7f7e74 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -13280,18 +13280,6 @@ struct TabItemView: View, Equatable { } } - private var rowHeightProbe: some View { - GeometryReader { proxy in - Color.clear - .onAppear { - rowHeight = max(proxy.size.height, 1) - } - .onChange(of: proxy.size.height) { _, newHeight in - rowHeight = max(newHeight, 1) - } - } - } - @ViewBuilder private var remoteWorkspaceSection: some View { let workspaceSnapshot = self.workspaceSnapshot @@ -13750,7 +13738,10 @@ struct TabItemView: View, Equatable { ) .shortcutHintVisibilityAnimation(value: showsWorkspaceShortcutHint) .padding(.horizontal, SidebarWorkspaceListMetrics.rowOuterHorizontalPadding) - .background { rowHeightProbe } + .sidebarRowHeightProbe() + .onPreferenceChange(SidebarRowHeightPreferenceKey.self) { height in + rowHeight = max(height, 1) + } .contentShape(Rectangle()) .opacity(isBeingDragged ? 0.6 : 1) .overlay { diff --git a/Sources/SidebarWorkspaceGroupHeaderView.swift b/Sources/SidebarWorkspaceGroupHeaderView.swift index 7c731a3f30f8..9f8ea19fb69f 100644 --- a/Sources/SidebarWorkspaceGroupHeaderView.swift +++ b/Sources/SidebarWorkspaceGroupHeaderView.swift @@ -110,18 +110,6 @@ struct SidebarWorkspaceGroupHeaderView: View, Equatable { return "\(shortcutModifierSymbol)\(shortcutDigit)" } - private var rowHeightProbe: some View { - GeometryReader { proxy in - Color.clear - .onAppear { - rowHeight = max(proxy.size.height, 1) - } - .onChange(of: proxy.size.height) { _, newHeight in - rowHeight = max(newHeight, 1) - } - } - } - var body: some View { HStack(spacing: 4) { CmuxSystemSymbolImage( @@ -259,7 +247,10 @@ struct SidebarWorkspaceGroupHeaderView: View, Equatable { offsetY: shortcutHintYOffset ) .padding(.horizontal, SidebarWorkspaceListMetrics.rowOuterHorizontalPadding) - .background { rowHeightProbe } + .sidebarRowHeightProbe() + .onPreferenceChange(SidebarRowHeightPreferenceKey.self) { height in + rowHeight = max(height, 1) + } .shortcutHintVisibilityAnimation(value: showsShortcutHint) .opacity(isBeingDragged ? 0.6 : 1) .overlay(alignment: .top) { @@ -382,3 +373,39 @@ struct SidebarWorkspaceGroupHeaderView: View, Equatable { } } } + +/// Publishes a sidebar row's measured height up to an ancestor so the value can +/// be consumed in `onPreferenceChange` — *after* the layout pass — instead of +/// being written into `@State` from inside a `GeometryReader` during layout. +/// +/// Writing layout-derived `@State` mid-layout retriggers the SwiftUI +/// AttributeGraph and reproduces the `StackLayout.sizeThatFits` / +/// `ViewLayoutEngine.sizeThatFits` re-render livelock documented in +/// https://github.com/manaflow-ai/cmux/issues/2586 and +/// https://github.com/manaflow-ai/cmux/issues/6556. The measured height only +/// feeds drag/drop hit metrics, so reporting it through a preference keeps the +/// exact pointer-edge behavior while keeping the LazyVStack row free of +/// layout-pass state writes. +struct SidebarRowHeightPreferenceKey: PreferenceKey { + static var defaultValue: CGFloat = 0 + + static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { + value = max(value, nextValue()) + } +} + +extension View { + /// Measures this view's height and reports it through + /// ``SidebarRowHeightPreferenceKey`` without writing `@State` during layout. + /// Pair with `.onPreferenceChange(SidebarRowHeightPreferenceKey.self)`. + func sidebarRowHeightProbe() -> some View { + background { + GeometryReader { proxy in + Color.clear.preference( + key: SidebarRowHeightPreferenceKey.self, + value: proxy.size.height + ) + } + } + } +} From b605f9fefd0601c7f3a27f708da459f0ec1fc205 Mon Sep 17 00:00:00 2001 From: cmux Date: Fri, 26 Jun 2026 02:05:53 -0700 Subject: [PATCH 2/3] Move shared sidebar row-height preference key to its own file Addresses the cmux Aziz file-organization policy and Greptile P2 review: `SidebarRowHeightPreferenceKey` + `View.sidebarRowHeightProbe()` are consumed by both `SidebarWorkspaceGroupHeaderView` and `ContentView`'s `TabItemView`, so housing them at the bottom of a view file left the cross-file dependency implicit. Move them into a dedicated `SidebarRowHeightPreferenceKey.swift` (named for the major type, with its tightly-coupled `View` helper co-located) and wire the file into the Xcode project. No behavior change. Co-Authored-By: Claude Opus 4.8 (1M context) --- Sources/SidebarRowHeightPreferenceKey.swift | 41 +++++++++++++++++++ Sources/SidebarWorkspaceGroupHeaderView.swift | 36 ---------------- cmux.xcodeproj/project.pbxproj | 4 ++ 3 files changed, 45 insertions(+), 36 deletions(-) create mode 100644 Sources/SidebarRowHeightPreferenceKey.swift diff --git a/Sources/SidebarRowHeightPreferenceKey.swift b/Sources/SidebarRowHeightPreferenceKey.swift new file mode 100644 index 000000000000..e17849613f2d --- /dev/null +++ b/Sources/SidebarRowHeightPreferenceKey.swift @@ -0,0 +1,41 @@ +import SwiftUI + +/// Publishes a sidebar row's measured height up to an ancestor so the value can +/// be consumed in `onPreferenceChange` — *after* the layout pass — instead of +/// being written into `@State` from inside a `GeometryReader` during layout. +/// +/// Writing layout-derived `@State` mid-layout retriggers the SwiftUI +/// AttributeGraph and reproduces the `StackLayout.sizeThatFits` / +/// `ViewLayoutEngine.sizeThatFits` re-render livelock documented in +/// https://github.com/manaflow-ai/cmux/issues/2586 and +/// https://github.com/manaflow-ai/cmux/issues/6556. The measured height only +/// feeds drag/drop hit metrics, so reporting it through a preference keeps the +/// exact pointer-edge behavior while keeping the LazyVStack row free of +/// layout-pass state writes. +/// +/// Shared by `SidebarWorkspaceGroupHeaderView` and `ContentView`'s +/// `TabItemView`; mirrors the existing `BrowserAddressBarHeightPreferenceKey` +/// pattern in `Sources/Panels/BrowserPanelView.swift`. +struct SidebarRowHeightPreferenceKey: PreferenceKey { + static var defaultValue: CGFloat = 0 + + static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { + value = max(value, nextValue()) + } +} + +extension View { + /// Measures this view's height and reports it through + /// ``SidebarRowHeightPreferenceKey`` without writing `@State` during layout. + /// Pair with `.onPreferenceChange(SidebarRowHeightPreferenceKey.self)`. + func sidebarRowHeightProbe() -> some View { + background { + GeometryReader { proxy in + Color.clear.preference( + key: SidebarRowHeightPreferenceKey.self, + value: proxy.size.height + ) + } + } + } +} diff --git a/Sources/SidebarWorkspaceGroupHeaderView.swift b/Sources/SidebarWorkspaceGroupHeaderView.swift index 9f8ea19fb69f..55f19f2da6f6 100644 --- a/Sources/SidebarWorkspaceGroupHeaderView.swift +++ b/Sources/SidebarWorkspaceGroupHeaderView.swift @@ -373,39 +373,3 @@ struct SidebarWorkspaceGroupHeaderView: View, Equatable { } } } - -/// Publishes a sidebar row's measured height up to an ancestor so the value can -/// be consumed in `onPreferenceChange` — *after* the layout pass — instead of -/// being written into `@State` from inside a `GeometryReader` during layout. -/// -/// Writing layout-derived `@State` mid-layout retriggers the SwiftUI -/// AttributeGraph and reproduces the `StackLayout.sizeThatFits` / -/// `ViewLayoutEngine.sizeThatFits` re-render livelock documented in -/// https://github.com/manaflow-ai/cmux/issues/2586 and -/// https://github.com/manaflow-ai/cmux/issues/6556. The measured height only -/// feeds drag/drop hit metrics, so reporting it through a preference keeps the -/// exact pointer-edge behavior while keeping the LazyVStack row free of -/// layout-pass state writes. -struct SidebarRowHeightPreferenceKey: PreferenceKey { - static var defaultValue: CGFloat = 0 - - static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { - value = max(value, nextValue()) - } -} - -extension View { - /// Measures this view's height and reports it through - /// ``SidebarRowHeightPreferenceKey`` without writing `@State` during layout. - /// Pair with `.onPreferenceChange(SidebarRowHeightPreferenceKey.self)`. - func sidebarRowHeightProbe() -> some View { - background { - GeometryReader { proxy in - Color.clear.preference( - key: SidebarRowHeightPreferenceKey.self, - value: proxy.size.height - ) - } - } - } -} diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index 8da4291ed351..c7313ab0c5ff 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -854,6 +854,7 @@ C0DE48000000000000000001 /* SidebarProviderMenuRegressionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE48000000000000000002 /* SidebarProviderMenuRegressionTests.swift */; }; B9000130A1B2C3D4E5F60719 /* SidebarPullRequestInteractivityUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9000131A1B2C3D4E5F60719 /* SidebarPullRequestInteractivityUITests.swift */; }; B8F266236A1A3D9A45BD840F /* SidebarResizeUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818DBCD4AB69EB72573E8138 /* SidebarResizeUITests.swift */; }; + C9A57901C9A57901C9A57901 /* SidebarRowHeightPreferenceKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9A57902C9A57902C9A57902 /* SidebarRowHeightPreferenceKey.swift */; }; C0DE35010000000000000001 /* SidebarScrim.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE35010000000000000002 /* SidebarScrim.swift */; }; C9A57513C9A57513C9A57513 /* SidebarScrollViewConfiguratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9A57514C9A57514C9A57514 /* SidebarScrollViewConfiguratorTests.swift */; }; E62155868BB29FEB5DAAAF25 /* SidebarSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD52285508B1D6A9875E7B3 /* SidebarSelectionState.swift */; }; @@ -1965,6 +1966,7 @@ C0DE48000000000000000002 /* SidebarProviderMenuRegressionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarProviderMenuRegressionTests.swift; sourceTree = ""; }; B9000131A1B2C3D4E5F60719 /* SidebarPullRequestInteractivityUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarPullRequestInteractivityUITests.swift; sourceTree = ""; }; 818DBCD4AB69EB72573E8138 /* SidebarResizeUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarResizeUITests.swift; sourceTree = ""; }; + C9A57902C9A57902C9A57902 /* SidebarRowHeightPreferenceKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarRowHeightPreferenceKey.swift; sourceTree = ""; }; C0DE35010000000000000002 /* SidebarScrim.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarScrim.swift; sourceTree = ""; }; C9A57514C9A57514C9A57514 /* SidebarScrollViewConfiguratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarScrollViewConfiguratorTests.swift; sourceTree = ""; }; 9AD52285508B1D6A9875E7B3 /* SidebarSelectionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarSelectionState.swift; sourceTree = ""; }; @@ -2544,6 +2546,7 @@ C9A57108C9A57108C9A57108 /* SidebarWorkspaceGroupDialogs.swift */, CA1F0A02CA1F0A02CA1F0A02 /* CmuxModalAlertPresentation.swift */, C9A57102C9A57102C9A57102 /* SidebarWorkspaceGroupHeaderView.swift */, + C9A57902C9A57902C9A57902 /* SidebarRowHeightPreferenceKey.swift */, 9962F9AE9962F9AE9962F9AE /* SidebarWorkspaceGroupHeaderDropDelegate.swift */, C9A57302C9A57302C9A57302 /* SidebarWorkspaceGroupHeaderMetrics.swift */, C9A5710AC9A5710AC9A5710A /* SidebarWorkspaceGroupingMetrics.swift */, @@ -4342,6 +4345,7 @@ C0DE5F210000000000000001 /* SidebarMetadataMarkdownRenderer.swift in Sources */, EA1F00000000000000000001 /* SidebarPathFormatter.swift in Sources */, C0DEF0A30000000000000001 /* SidebarPortDisplayText.swift in Sources */, + C9A57901C9A57901C9A57901 /* SidebarRowHeightPreferenceKey.swift in Sources */, C0DE35010000000000000001 /* SidebarScrim.swift in Sources */, E62155868BB29FEB5DAAAF25 /* SidebarSelectionState.swift in Sources */, F57072635F25EBCA741E125D /* SidebarState.swift in Sources */, From cdec898bf876382484ccf0c99af2435decd94593 Mon Sep 17 00:00:00 2001 From: Austin Wang Date: Fri, 3 Jul 2026 13:47:43 -0700 Subject: [PATCH 3/3] Drop obsolete sidebar row-height probe --- .github/swift-file-length-budget.tsv | 2 +- Sources/ContentView.swift | 4 -- Sources/SidebarRowHeightPreferenceKey.swift | 41 ------------------- Sources/SidebarWorkspaceGroupHeaderView.swift | 4 -- cmux.xcodeproj/project.pbxproj | 4 -- 5 files changed, 1 insertion(+), 54 deletions(-) delete mode 100644 Sources/SidebarRowHeightPreferenceKey.swift diff --git a/.github/swift-file-length-budget.tsv b/.github/swift-file-length-budget.tsv index 7d990cbc5aeb..08404720be6a 100644 --- a/.github/swift-file-length-budget.tsv +++ b/.github/swift-file-length-budget.tsv @@ -3,7 +3,7 @@ # Reduce counts as files shrink. CI fails if tracked files exceed this budget. 34660 CLI/cmux.swift 17954 Sources/AppDelegate.swift -16431 Sources/ContentView.swift +16427 Sources/ContentView.swift 14270 Sources/TerminalController.swift 13172 Sources/Workspace.swift 12348 cmuxTests/AppDelegateShortcutRoutingTests.swift diff --git a/Sources/ContentView.swift b/Sources/ContentView.swift index 26010bce2517..5378a63140e3 100644 --- a/Sources/ContentView.swift +++ b/Sources/ContentView.swift @@ -14015,10 +14015,6 @@ struct TabItemView: View, Equatable { ) .shortcutHintVisibilityAnimation(value: showsWorkspaceShortcutHint) .padding(.horizontal, SidebarWorkspaceListMetrics.rowOuterHorizontalPadding) - .sidebarRowHeightProbe() - .onPreferenceChange(SidebarRowHeightPreferenceKey.self) { height in - rowHeight = max(height, 1) - } .contentShape(Rectangle()) .onHover { hovering in rowInteractionState.setPointerHovering(hovering) diff --git a/Sources/SidebarRowHeightPreferenceKey.swift b/Sources/SidebarRowHeightPreferenceKey.swift deleted file mode 100644 index e17849613f2d..000000000000 --- a/Sources/SidebarRowHeightPreferenceKey.swift +++ /dev/null @@ -1,41 +0,0 @@ -import SwiftUI - -/// Publishes a sidebar row's measured height up to an ancestor so the value can -/// be consumed in `onPreferenceChange` — *after* the layout pass — instead of -/// being written into `@State` from inside a `GeometryReader` during layout. -/// -/// Writing layout-derived `@State` mid-layout retriggers the SwiftUI -/// AttributeGraph and reproduces the `StackLayout.sizeThatFits` / -/// `ViewLayoutEngine.sizeThatFits` re-render livelock documented in -/// https://github.com/manaflow-ai/cmux/issues/2586 and -/// https://github.com/manaflow-ai/cmux/issues/6556. The measured height only -/// feeds drag/drop hit metrics, so reporting it through a preference keeps the -/// exact pointer-edge behavior while keeping the LazyVStack row free of -/// layout-pass state writes. -/// -/// Shared by `SidebarWorkspaceGroupHeaderView` and `ContentView`'s -/// `TabItemView`; mirrors the existing `BrowserAddressBarHeightPreferenceKey` -/// pattern in `Sources/Panels/BrowserPanelView.swift`. -struct SidebarRowHeightPreferenceKey: PreferenceKey { - static var defaultValue: CGFloat = 0 - - static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { - value = max(value, nextValue()) - } -} - -extension View { - /// Measures this view's height and reports it through - /// ``SidebarRowHeightPreferenceKey`` without writing `@State` during layout. - /// Pair with `.onPreferenceChange(SidebarRowHeightPreferenceKey.self)`. - func sidebarRowHeightProbe() -> some View { - background { - GeometryReader { proxy in - Color.clear.preference( - key: SidebarRowHeightPreferenceKey.self, - value: proxy.size.height - ) - } - } - } -} diff --git a/Sources/SidebarWorkspaceGroupHeaderView.swift b/Sources/SidebarWorkspaceGroupHeaderView.swift index a53302a60b48..adb10de33bd0 100644 --- a/Sources/SidebarWorkspaceGroupHeaderView.swift +++ b/Sources/SidebarWorkspaceGroupHeaderView.swift @@ -277,10 +277,6 @@ struct SidebarWorkspaceGroupHeaderView: View, Equatable { offsetY: shortcutHintYOffset ) .padding(.horizontal, SidebarWorkspaceListMetrics.rowOuterHorizontalPadding) - .sidebarRowHeightProbe() - .onPreferenceChange(SidebarRowHeightPreferenceKey.self) { height in - rowHeight = max(height, 1) - } .shortcutHintVisibilityAnimation(value: showsShortcutHint) .onHover { hovering in rowInteractionState.setPointerHovering(hovering) diff --git a/cmux.xcodeproj/project.pbxproj b/cmux.xcodeproj/project.pbxproj index 141da43027b4..27cb93261751 100644 --- a/cmux.xcodeproj/project.pbxproj +++ b/cmux.xcodeproj/project.pbxproj @@ -960,7 +960,6 @@ C0DE48000000000000000001 /* SidebarProviderMenuRegressionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE48000000000000000002 /* SidebarProviderMenuRegressionTests.swift */; }; B9000130A1B2C3D4E5F60719 /* SidebarPullRequestInteractivityUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9000131A1B2C3D4E5F60719 /* SidebarPullRequestInteractivityUITests.swift */; }; B8F266236A1A3D9A45BD840F /* SidebarResizeUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818DBCD4AB69EB72573E8138 /* SidebarResizeUITests.swift */; }; - C9A57901C9A57901C9A57901 /* SidebarRowHeightPreferenceKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9A57902C9A57902C9A57902 /* SidebarRowHeightPreferenceKey.swift */; }; C0DE35010000000000000001 /* SidebarScrim.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DE35010000000000000002 /* SidebarScrim.swift */; }; C9A57513C9A57513C9A57513 /* SidebarScrollViewConfiguratorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9A57514C9A57514C9A57514 /* SidebarScrollViewConfiguratorTests.swift */; }; E62155868BB29FEB5DAAAF25 /* SidebarSelectionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AD52285508B1D6A9875E7B3 /* SidebarSelectionState.swift */; }; @@ -2248,7 +2247,6 @@ C0DE48000000000000000002 /* SidebarProviderMenuRegressionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarProviderMenuRegressionTests.swift; sourceTree = ""; }; B9000131A1B2C3D4E5F60719 /* SidebarPullRequestInteractivityUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarPullRequestInteractivityUITests.swift; sourceTree = ""; }; 818DBCD4AB69EB72573E8138 /* SidebarResizeUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarResizeUITests.swift; sourceTree = ""; }; - C9A57902C9A57902C9A57902 /* SidebarRowHeightPreferenceKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarRowHeightPreferenceKey.swift; sourceTree = ""; }; C0DE35010000000000000002 /* SidebarScrim.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarScrim.swift; sourceTree = ""; }; C9A57514C9A57514C9A57514 /* SidebarScrollViewConfiguratorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarScrollViewConfiguratorTests.swift; sourceTree = ""; }; 9AD52285508B1D6A9875E7B3 /* SidebarSelectionState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarSelectionState.swift; sourceTree = ""; }; @@ -2917,7 +2915,6 @@ CA1F0A02CA1F0A02CA1F0A02 /* CmuxModalAlertPresentation.swift */, C9A57606C9A57606C9A57606 /* SidebarWorkspaceDropTargetWriters.swift */, C9A57102C9A57102C9A57102 /* SidebarWorkspaceGroupHeaderView.swift */, - C9A57902C9A57902C9A57902 /* SidebarRowHeightPreferenceKey.swift */, C9A57302C9A57302C9A57302 /* SidebarWorkspaceGroupHeaderMetrics.swift */, C9A5710AC9A5710AC9A5710A /* SidebarWorkspaceGroupingMetrics.swift */, D5037010000000000000002 /* RenderableSystemSymbol.swift */, @@ -4946,7 +4943,6 @@ C0DE5F210000000000000001 /* SidebarMetadataMarkdownRenderer.swift in Sources */, EA1F00000000000000000001 /* SidebarPathFormatter.swift in Sources */, C0DEF0A30000000000000001 /* SidebarPortDisplayText.swift in Sources */, - C9A57901C9A57901C9A57901 /* SidebarRowHeightPreferenceKey.swift in Sources */, C0DE35010000000000000001 /* SidebarScrim.swift in Sources */, E62155868BB29FEB5DAAAF25 /* SidebarSelectionState.swift in Sources */, F57072635F25EBCA741E125D /* SidebarState.swift in Sources */,