Skip to content

Commit 0c8c20f

Browse files
committed
Minor adjustment
1 parent e564d0f commit 0c8c20f

3 files changed

Lines changed: 30 additions & 33 deletions

File tree

Tool/Sources/XcodeInspector/Apps/XcodeAppInstanceInspector.swift

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,6 @@ import Combine
66
import Foundation
77

88
public final class XcodeAppInstanceInspector: AppInstanceInspector {
9-
@Published public fileprivate(set) var focusedWindow: XcodeWindowInspector?
10-
@Published public fileprivate(set) var documentURL: URL? = nil
11-
@Published public fileprivate(set) var workspaceURL: URL? = nil
12-
@Published public fileprivate(set) var projectRootURL: URL? = nil
13-
@Published public fileprivate(set) var workspaces = [WorkspaceIdentifier: Workspace]()
14-
public var realtimeWorkspaces: [WorkspaceIdentifier: WorkspaceInfo] {
15-
updateWorkspaceInfo()
16-
return workspaces.mapValues(\.info)
17-
}
18-
199
public struct AXNotification {
2010
public var kind: AXNotificationKind
2111
public var element: AXUIElement
@@ -71,9 +61,18 @@ public final class XcodeAppInstanceInspector: AppInstanceInspector {
7161
}
7262
}
7363

74-
public let axNotifications = AsyncPassthroughSubject<AXNotification>()
75-
64+
@Published public fileprivate(set) var focusedWindow: XcodeWindowInspector?
65+
@Published public fileprivate(set) var documentURL: URL? = nil
66+
@Published public fileprivate(set) var workspaceURL: URL? = nil
67+
@Published public fileprivate(set) var projectRootURL: URL? = nil
68+
@Published public fileprivate(set) var workspaces = [WorkspaceIdentifier: Workspace]()
7669
@Published public private(set) var completionPanel: AXUIElement?
70+
public var realtimeWorkspaces: [WorkspaceIdentifier: WorkspaceInfo] {
71+
updateWorkspaceInfo()
72+
return workspaces.mapValues(\.info)
73+
}
74+
75+
public let axNotifications = AsyncPassthroughSubject<AXNotification>()
7776

7877
public var realtimeDocumentURL: URL? {
7978
guard let window = appElement.focusedWindow,
@@ -144,7 +143,16 @@ public final class XcodeAppInstanceInspector: AppInstanceInspector {
144143
}
145144

146145
@MainActor
147-
func observeFocusedWindow() {
146+
func refresh() {
147+
if let focusedWindow = focusedWindow as? WorkspaceXcodeWindowInspector {
148+
focusedWindow.refresh()
149+
} else {
150+
observeFocusedWindow()
151+
}
152+
}
153+
154+
@MainActor
155+
private func observeFocusedWindow() {
148156
if let window = appElement.focusedWindow {
149157
if window.identifier == "Xcode.WorkspaceWindow" {
150158
let window = WorkspaceXcodeWindowInspector(
@@ -192,16 +200,7 @@ public final class XcodeAppInstanceInspector: AppInstanceInspector {
192200
}
193201

194202
@MainActor
195-
func refresh() {
196-
if let focusedWindow = focusedWindow as? WorkspaceXcodeWindowInspector {
197-
focusedWindow.refresh()
198-
} else {
199-
observeFocusedWindow()
200-
}
201-
}
202-
203-
@MainActor
204-
func observeAXNotifications() {
203+
private func observeAXNotifications() {
205204
longRunningTasks.forEach { $0.cancel() }
206205
longRunningTasks = []
207206

Tool/Sources/XcodeInspector/SourceEditor.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public class SourceEditor {
1919
case scrollPositionChanged
2020
}
2121

22-
public let axNotifications = AsyncPassthroughSubject<AXNotification>()
2322
let runningApplication: NSRunningApplication
2423
public let element: AXUIElement
2524
var observeAXNotificationsTask: Task<Void, Never>?
25+
public let axNotifications = AsyncPassthroughSubject<AXNotification>()
2626

2727
/// The content of the source editor.
2828
public var content: Content {
@@ -53,18 +53,14 @@ public class SourceEditor {
5353
public init(runningApplication: NSRunningApplication, element: AXUIElement) {
5454
self.runningApplication = runningApplication
5555
self.element = element
56-
57-
Task { @MainActor in
58-
observeAXNotifications()
59-
}
56+
observeAXNotifications()
6057
}
6158

62-
@MainActor
63-
func observeAXNotifications() {
59+
private func observeAXNotifications() {
6460
observeAXNotificationsTask?.cancel()
6561
observeAXNotificationsTask = Task { @MainActor [weak self] in
6662
guard let self else { return }
67-
await withTaskGroup(of: Void.self) { [weak self] group in
63+
await withThrowingTaskGroup(of: Void.self) { [weak self] group in
6864
guard let self else { return }
6965
let editorNotifications = AXNotificationStream(
7066
app: runningApplication,
@@ -76,6 +72,7 @@ public class SourceEditor {
7672

7773
group.addTask { [weak self] in
7874
for await notification in editorNotifications {
75+
try Task.checkCancellation()
7976
guard let self else { return }
8077
if let kind: AXNotificationKind = {
8178
switch notification.name {
@@ -101,6 +98,7 @@ public class SourceEditor {
10198

10299
group.addTask { [weak self] in
103100
for await notification in scrollViewNotifications {
101+
try Task.checkCancellation()
104102
guard let self else { return }
105103
self.axNotifications.send(.init(
106104
kind: .scrollPositionChanged,
@@ -110,7 +108,7 @@ public class SourceEditor {
110108
}
111109
}
112110

113-
await group.waitForAll()
111+
try? await group.waitForAll()
114112
}
115113
}
116114
}

Tool/Sources/XcodeInspector/XcodeInspector.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ public final class XcodeInspector: ObservableObject {
189189
}
190190

191191
@MainActor
192-
func setActiveXcode(_ xcode: XcodeAppInstanceInspector) {
192+
private func setActiveXcode(_ xcode: XcodeAppInstanceInspector) {
193193
previousActiveApplication = activeApplication
194194
activeApplication = xcode
195195
xcode.refresh()

0 commit comments

Comments
 (0)