@@ -39,7 +39,8 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
3939 defer {
4040 presenter. markAsProcessing ( false )
4141 }
42- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return }
42+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
43+ else { return }
4344 let ( workspace, filespace) = try await Service . shared. workspacePool
4445 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
4546
@@ -80,7 +81,8 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
8081
8182 @WorkspaceActor
8283 private func _presentNextSuggestion( editor: EditorContent ) async throws {
83- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return }
84+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
85+ else { return }
8486 let ( workspace, filespace) = try await Service . shared. workspacePool
8587 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
8688 workspace. selectNextSuggestion ( forFileAt: fileURL)
@@ -105,7 +107,8 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
105107
106108 @WorkspaceActor
107109 private func _presentPreviousSuggestion( editor: EditorContent ) async throws {
108- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return }
110+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
111+ else { return }
109112 let ( workspace, filespace) = try await Service . shared. workspacePool
110113 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
111114 workspace. selectPreviousSuggestion ( forFileAt: fileURL)
@@ -130,7 +133,8 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
130133
131134 @WorkspaceActor
132135 private func _rejectSuggestion( editor: EditorContent ) async throws {
133- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return }
136+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
137+ else { return }
134138
135139 let ( workspace, _) = try await Service . shared. workspacePool
136140 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
@@ -140,7 +144,8 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
140144
141145 @WorkspaceActor
142146 func acceptSuggestion( editor: EditorContent ) async throws -> UpdatedContent ? {
143- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return nil }
147+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
148+ else { return nil }
144149 let ( workspace, _) = try await Service . shared. workspacePool
145150 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
146151
@@ -173,7 +178,8 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
173178 }
174179
175180 func acceptPromptToCode( editor: EditorContent ) async throws -> UpdatedContent ? {
176- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return nil }
181+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
182+ else { return nil }
177183
178184 let injector = SuggestionInjector ( )
179185 var lines = editor. lines
@@ -248,7 +254,8 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
248254
249255 @WorkspaceActor
250256 func prepareCache( editor: EditorContent ) async throws -> UpdatedContent ? {
251- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return nil }
257+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
258+ else { return nil }
252259 let ( _, filespace) = try await Service . shared. workspacePool
253260 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
254261 filespace. codeMetadata. uti = editor. uti
@@ -351,7 +358,8 @@ extension WindowBaseCommandHandler {
351358 generateDescription: Bool ? ,
352359 name: String ?
353360 ) async throws {
354- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return }
361+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
362+ else { return }
355363 let ( workspace, filespace) = try await Service . shared. workspacePool
356364 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
357365 guard workspace. suggestionPlugin? . isSuggestionFeatureEnabled ?? false else {
@@ -398,8 +406,18 @@ extension WindowBaseCommandHandler {
398406 let viewStore = Service . shared. guiController. viewStore
399407
400408 let customCommandTemplateProcessor = CustomCommandTemplateProcessor ( )
401- let newExtraSystemPrompt = extraSystemPrompt. map ( customCommandTemplateProcessor. process)
402- let newPrompt = prompt. map ( customCommandTemplateProcessor. process)
409+
410+ let newExtraSystemPrompt : String ? = if let extraSystemPrompt {
411+ await customCommandTemplateProcessor. process ( extraSystemPrompt)
412+ } else {
413+ nil
414+ }
415+
416+ let newPrompt : String ? = if let prompt {
417+ await customCommandTemplateProcessor. process ( prompt)
418+ } else {
419+ nil
420+ }
403421
404422 _ = await Task { @MainActor in
405423 // if there is already a prompt to code presenting, we should not present another one
0 commit comments