Skip to content

Commit 74eeee3

Browse files
committed
Tapping keys to cancel commands
1 parent f39b909 commit 74eeee3

2 files changed

Lines changed: 23 additions & 5 deletions

File tree

Core/Sources/Service/AutoTrigger.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,23 @@ public actor AutoTrigger {
7777
}
7878
}
7979

80+
await { @ServiceActor in
81+
inflightRealtimeSuggestionsTasks.forEach {
82+
$0.cancel()
83+
}
84+
inflightRealtimeSuggestionsTasks.removeAll()
85+
}()
86+
8087
let escape = 0x35
8188

8289
guard event.type == .keyUp,
8390
event.getIntegerValueField(.keyboardEventKeycode) != escape
8491
else { continue }
85-
86-
os_log(.info, "Prefetch suggestions.")
8792

8893
triggerTask = Task { @ServiceActor in
89-
try? await Task.sleep(nanoseconds: 1_500_000_000)
94+
try? await Task.sleep(nanoseconds: 500_000_000)
9095
if Task.isCancelled { return }
96+
os_log(.info, "Prefetch suggestions.")
9197
let fileURL = try? await Environment.fetchCurrentFileURL()
9298
let folderURL = try? await Environment.fetchCurrentProjectRootURL(fileURL)
9399
guard let workspaceURL = folderURL ?? fileURL else { return }

Core/Sources/Service/XPCService.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import XPCShared
1212

1313
@ServiceActor
1414
var workspaces = [URL: Workspace]()
15+
@ServiceActor
16+
var inflightRealtimeSuggestionsTasks = Set<Task<Void, Never>>()
1517

1618
public class XPCService: NSObject, XPCServiceProtocol {
1719
public func getXPCServiceVersion(withReply reply: @escaping (String, String) -> Void) {
@@ -87,6 +89,7 @@ public class XPCService: NSObject, XPCServiceProtocol {
8789
) {
8890
Task { @ServiceActor in
8991
do {
92+
throw CancellationError()
9093
let editor = try JSONDecoder().decode(EditorContent.self, from: editorContent)
9194
let fileURL = try await Environment.fetchCurrentFileURL()
9295
let workspace = try await fetchOrCreateWorkspaceIfNeeded(fileURL: fileURL)
@@ -220,11 +223,14 @@ public class XPCService: NSObject, XPCServiceProtocol {
220223
editorContent: Data,
221224
withReply reply: @escaping (Data?, Error?) -> Void
222225
) {
223-
Task { @ServiceActor in
226+
let task = Task { @ServiceActor in
224227
do {
225228
let editor = try JSONDecoder().decode(EditorContent.self, from: editorContent)
229+
try Task.checkCancellation()
226230
let fileURL = try await Environment.fetchCurrentFileURL()
231+
try Task.checkCancellation()
227232
let workspace = try await fetchOrCreateWorkspaceIfNeeded(fileURL: fileURL)
233+
try Task.checkCancellation()
228234
guard let updatedContent = workspace.getRealtimeSuggestedCode(
229235
forFileAt: fileURL,
230236
content: editor.content,
@@ -237,12 +243,15 @@ public class XPCService: NSObject, XPCServiceProtocol {
237243
reply(nil, nil)
238244
return
239245
}
246+
try Task.checkCancellation()
240247
reply(try JSONEncoder().encode(updatedContent), nil)
241248
} catch {
242249
os_log(.error, "%@", error.localizedDescription)
243250
reply(nil, NSError.from(error))
244251
}
245252
}
253+
254+
Task { @ServiceActor in inflightRealtimeSuggestionsTasks.insert(task) }
246255
}
247256

248257
public func setAutoSuggestion(enabled: Bool, withReply reply: @escaping (Error?) -> Void) {
@@ -277,10 +286,11 @@ public class XPCService: NSObject, XPCServiceProtocol {
277286
editorContent: Data,
278287
withReply reply: @escaping () -> Void
279288
) {
280-
Task { @ServiceActor in
289+
let task = Task { @ServiceActor in
281290
do {
282291
let editor = try JSONDecoder().decode(EditorContent.self, from: editorContent)
283292
let fileURL = try await Environment.fetchCurrentFileURL()
293+
try Task.checkCancellation()
284294
let workspace = try await fetchOrCreateWorkspaceIfNeeded(fileURL: fileURL)
285295
_ = workspace.getRealtimeSuggestedCode(
286296
forFileAt: fileURL,
@@ -297,5 +307,7 @@ public class XPCService: NSObject, XPCServiceProtocol {
297307
reply()
298308
}
299309
}
310+
311+
Task { @ServiceActor in inflightRealtimeSuggestionsTasks.insert(task) }
300312
}
301313
}

0 commit comments

Comments
 (0)