@@ -190,20 +190,24 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
190190 var cursorPosition = editor. cursorPosition
191191 var extraInfo = SuggestionInjector . ExtraInfo ( )
192192
193- let dataSource = Service . shared. guiController. widgetDataSource
193+ let viewStore = Service . shared. guiController. viewStore
194194
195- if let service = await dataSource. promptToCode? . promptToCodeService {
196- let rangeStart = service. selectionRange? . start ?? editor. cursorPosition
195+ if let promptToCode = viewStore. state. promptToCodeGroup. activePromptToCode {
196+ if promptToCode. isAttachedToSelectionRange, promptToCode. documentURL != fileURL {
197+ return nil
198+ }
199+
200+ let rangeStart = promptToCode. selectionRange? . start ?? editor. cursorPosition
197201
198202 let suggestion = CodeSuggestion (
199- text: service . code,
203+ text: promptToCode . code,
200204 position: rangeStart,
201205 uuid: UUID ( ) . uuidString,
202- range: service . selectionRange ?? . init(
206+ range: promptToCode . selectionRange ?? . init(
203207 start: editor. cursorPosition,
204208 end: editor. cursorPosition
205209 ) ,
206- displayText: service . code
210+ displayText: promptToCode . code
207211 )
208212
209213 injector. acceptSuggestion (
@@ -213,16 +217,19 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
213217 extraInfo: & extraInfo
214218 )
215219
216- if service. isContinuous {
217- service. selectionRange = . init(
218- start: rangeStart,
219- end: cursorPosition
220+ _ = await Task { @MainActor [ cursorPosition] in
221+ viewStore. send (
222+ . promptToCodeGroup( . updatePromptToCodeRange(
223+ id: promptToCode. id,
224+ range: . init( start: rangeStart, end: cursorPosition)
225+ ) )
220226 )
221- presenter. presentPromptToCode ( fileURL: fileURL)
222- } else {
223- await dataSource. removePromptToCode ( )
224- presenter. closePromptToCode ( fileURL: fileURL)
225- }
227+ viewStore. send (
228+ . promptToCodeGroup( . discardAcceptedPromptToCodeIfNotContinuous(
229+ id: promptToCode. id
230+ ) )
231+ )
232+ } . result
226233
227234 return . init(
228235 content: String ( lines. joined ( separator: " " ) ) ,
@@ -348,7 +355,7 @@ extension WindowBaseCommandHandler {
348355 presenter. markAsProcessing ( true )
349356 defer { presenter. markAsProcessing ( false ) }
350357 let fileURL = try await Environment . fetchCurrentFileURL ( )
351- let ( workspace, _ ) = try await Service . shared. workspacePool
358+ let ( workspace, filespace ) = try await Service . shared. workspacePool
352359 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
353360 guard workspace. suggestionPlugin? . isSuggestionFeatureEnabled ?? false else {
354361 presenter. presentErrorMessage ( " Prompt to code is disabled for this project " )
@@ -391,26 +398,25 @@ extension WindowBaseCommandHandler {
391398 )
392399 } ( ) as ( String , CursorRange )
393400
394- let dataSource = Service . shared. guiController. widgetDataSource
395-
396- let promptToCode = await dataSource. createPromptToCode (
397- for: fileURL,
398- projectURL: workspace. projectRootURL,
399- selectedCode: code,
400- allCode: editor. content,
401- selectionRange: selection,
402- language: codeLanguage,
403- extraSystemPrompt: extraSystemPrompt,
404- generateDescriptionRequirement: generateDescription,
405- name: name
406- )
407-
408- promptToCode. isContinuous = isContinuous
409- if let prompt, !prompt. isEmpty {
410- Task { try await promptToCode. modifyCode ( prompt: prompt) }
411- }
412-
413- presenter. presentPromptToCode ( fileURL: fileURL)
401+ let viewStore = Service . shared. guiController. viewStore
402+
403+ _ = await Task { @MainActor in
404+ viewStore. send ( . promptToCodeGroup( . createPromptToCode( . init(
405+ code: code,
406+ selectionRange: selection,
407+ language: codeLanguage,
408+ identSize: filespace. codeMetadata. indentSize ?? 4 ,
409+ usesTabsForIndentation: filespace. codeMetadata. usesTabsForIndentation ?? false ,
410+ documentURL: fileURL,
411+ projectRootURL: workspace. projectRootURL,
412+ allCode: editor. content,
413+ isContinuous: isContinuous,
414+ commandName: name,
415+ defaultPrompt: prompt ?? " " ,
416+ extraSystemPrompt: extraSystemPrompt,
417+ generateDescriptionRequirement: generateDescription
418+ ) ) ) )
419+ } . result
414420 }
415421
416422 func executeSingleRoundDialog(
0 commit comments