Skip to content

Commit 1b751fe

Browse files
committed
Make request cancellation simpler
1 parent 7e6e07b commit 1b751fe

File tree

3 files changed

+7
-39
lines changed

3 files changed

+7
-39
lines changed

Core/Sources/Service/RealtimeSuggestionController.swift

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public class RealtimeSuggestionController {
191191
if event.type == .keyDown {
192192
await cancelInFlightTasks()
193193
} else {
194-
let task = Task {
194+
Task {
195195
#warning(
196196
"TODO: Any method to avoid using AppleScript to check that completion panel is presented?"
197197
)
@@ -200,7 +200,6 @@ public class RealtimeSuggestionController {
200200
self.triggerPrefetchDebounced(force: true)
201201
}
202202
}
203-
inflightRealtimeSuggestionsTasks.insert(task)
204203
}
205204
}
206205
}
@@ -247,18 +246,6 @@ public class RealtimeSuggestionController {
247246
await workspace.cancelInFlightRealtimeSuggestionRequests()
248247
}
249248
}
250-
group.addTask {
251-
await { @ServiceActor in
252-
inflightRealtimeSuggestionsTasks.forEach {
253-
if $0 == excluding { return }
254-
$0.cancel()
255-
}
256-
inflightRealtimeSuggestionsTasks.removeAll()
257-
if let excluded = excluding {
258-
inflightRealtimeSuggestionsTasks.insert(excluded)
259-
}
260-
}()
261-
}
262249
}
263250
}
264251

Core/Sources/Service/Workspace.swift

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ final class Workspace {
9191
UserDefaults.shared.value(for: \.realtimeSuggestionToggle)
9292
}
9393

94-
var realtimeSuggestionRequests = Set<Task<Void, Error>>()
9594
let userDefaultsObserver = UserDefaultsObserver(
9695
object: UserDefaults.shared, forKeyPaths: [
9796
UserDefaultPreferenceKeys().suggestionFeatureEnabledProjectList.key,
@@ -245,12 +244,8 @@ extension Workspace {
245244
@discardableResult
246245
func generateSuggestions(
247246
forFileAt fileURL: URL,
248-
editor: EditorContent,
249-
shouldcancelInFlightRealtimeSuggestionRequests: Bool = true
247+
editor: EditorContent
250248
) async throws -> [CodeSuggestion] {
251-
if shouldcancelInFlightRealtimeSuggestionRequests {
252-
cancelInFlightRealtimeSuggestionRequests()
253-
}
254249
refreshUpdateTime()
255250

256251
let filespace = createFilespaceIfNeeded(fileURL: fileURL)
@@ -291,7 +286,6 @@ extension Workspace {
291286
}
292287

293288
func selectNextSuggestion(forFileAt fileURL: URL) {
294-
cancelInFlightRealtimeSuggestionRequests()
295289
refreshUpdateTime()
296290
guard let filespace = filespaces[fileURL],
297291
filespace.suggestions.count > 1
@@ -303,7 +297,6 @@ extension Workspace {
303297
}
304298

305299
func selectPreviousSuggestion(forFileAt fileURL: URL) {
306-
cancelInFlightRealtimeSuggestionRequests()
307300
refreshUpdateTime()
308301
guard let filespace = filespaces[fileURL],
309302
filespace.suggestions.count > 1
@@ -315,7 +308,6 @@ extension Workspace {
315308
}
316309

317310
func rejectSuggestion(forFileAt fileURL: URL, editor: EditorContent?) {
318-
cancelInFlightRealtimeSuggestionRequests()
319311
refreshUpdateTime()
320312

321313
if let editor, !editor.uti.isEmpty {
@@ -331,7 +323,6 @@ extension Workspace {
331323
}
332324

333325
func acceptSuggestion(forFileAt fileURL: URL, editor: EditorContent?) -> CodeSuggestion? {
334-
cancelInFlightRealtimeSuggestionRequests()
335326
refreshUpdateTime()
336327
guard let filespace = filespaces[fileURL],
337328
!filespace.suggestions.isEmpty,
@@ -412,10 +403,8 @@ extension Workspace {
412403
return filespace.isExpired
413404
}
414405

415-
func cancelInFlightRealtimeSuggestionRequests() {
416-
for task in realtimeSuggestionRequests {
417-
task.cancel()
418-
}
419-
realtimeSuggestionRequests = []
406+
func cancelInFlightRealtimeSuggestionRequests() async {
407+
guard let suggestionService else { return }
408+
await suggestionService.cancelRequest()
420409
}
421410
}

Core/Sources/Service/XPCService.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@ import XPCShared
1515
@ServiceActor
1616
var workspaces = [URL: Workspace]()
1717

18-
#warning("TODO: Find a better place to store it!")
19-
@ServiceActor
20-
var inflightRealtimeSuggestionsTasks = Set<Task<Void, Never>>()
21-
2218
public class XPCService: NSObject, XPCServiceProtocol {
2319
// MARK: - Service
2420

@@ -127,15 +123,13 @@ public class XPCService: NSObject, XPCServiceProtocol {
127123
editorContent: Data,
128124
withReply reply: @escaping (Data?, Error?) -> Void
129125
) {
130-
let task = replyWithUpdatedContent(
126+
replyWithUpdatedContent(
131127
editorContent: editorContent,
132128
isRealtimeSuggestionRelatedCommand: true,
133129
withReply: reply
134130
) { handler, editor in
135131
try await handler.presentRealtimeSuggestions(editor: editor)
136132
}
137-
138-
Task { @ServiceActor in inflightRealtimeSuggestionsTasks.insert(task) }
139133
}
140134

141135
public func prefetchRealtimeSuggestions(
@@ -145,15 +139,13 @@ public class XPCService: NSObject, XPCServiceProtocol {
145139
// We don't need to wait for this.
146140
reply()
147141

148-
let task = replyWithUpdatedContent(
142+
replyWithUpdatedContent(
149143
editorContent: editorContent,
150144
isRealtimeSuggestionRelatedCommand: true,
151145
withReply: { _, _ in }
152146
) { handler, editor in
153147
try await handler.generateRealtimeSuggestions(editor: editor)
154148
}
155-
156-
Task { @ServiceActor in inflightRealtimeSuggestionsTasks.insert(task) }
157149
}
158150

159151
public func chatWithSelection(

0 commit comments

Comments
 (0)