@@ -193,320 +193,6 @@ extension Workspace {
193193 }
194194}
195195
196- @available ( * , deprecated, message: " These should be replaced. " )
197- extension Workspace {
198- func getRealtimeSuggestedCode(
199- forFileAt fileURL: URL ,
200- content: String ,
201- lines: [ String ] ,
202- cursorPosition: CursorPosition ,
203- tabSize: Int ,
204- indentSize: Int ,
205- usesTabsForIndentation: Bool
206- ) -> UpdatedContent ? {
207- cancelInFlightRealtimeSuggestionRequests ( )
208- guard isRealtimeSuggestionEnabled else { return nil }
209-
210- let filespace = filespaces [ fileURL] ?? . init( fileURL: fileURL)
211- if filespaces [ fileURL] == nil {
212- filespaces [ fileURL] = filespace
213- }
214-
215- let injector = SuggestionInjector ( )
216- var extraInfo = SuggestionInjector . ExtraInfo ( )
217- var lines = lines
218- var cursorPosition = cursorPosition
219-
220- injector. rejectCurrentSuggestions (
221- from: & lines,
222- cursorPosition: & cursorPosition,
223- extraInfo: & extraInfo
224- )
225-
226- let snapshot = Filespace . Snapshot (
227- linesHash: lines. hashValue,
228- cursorPosition: cursorPosition
229- )
230-
231- if snapshot != filespace. suggestionSourceSnapshot {
232- let task = Task {
233- let result = try await getSuggestedCode (
234- forFileAt: fileURL,
235- content: content,
236- lines: lines,
237- cursorPosition: cursorPosition,
238- tabSize: tabSize,
239- indentSize: indentSize,
240- usesTabsForIndentation: usesTabsForIndentation,
241- shouldcancelInFlightRealtimeSuggestionRequests: false
242- )
243- try Task . checkCancellation ( )
244- if result != nil {
245- try ? await Environment . triggerAction ( " Real-time Suggestions " )
246- }
247- }
248-
249- realtimeSuggestionRequests. insert ( task)
250-
251- return UpdatedContent (
252- content: String ( lines. joined ( separator: " " ) ) ,
253- newCursor: cursorPosition,
254- modifications: extraInfo. modifications
255- )
256- }
257-
258- if filespace. suggestions. isEmpty || snapshot != filespace. suggestionSourceSnapshot {
259- return . init(
260- content: content,
261- newCursor: cursorPosition,
262- modifications: extraInfo. modifications
263- )
264- }
265-
266- injector. proposeSuggestion (
267- intoContentWithoutSuggestion: & lines,
268- completion: filespace. suggestions [ filespace. suggestionIndex] ,
269- index: filespace. suggestionIndex,
270- count: filespace. suggestions. count,
271- extraInfo: & extraInfo
272- )
273-
274- return . init(
275- content: String ( lines. joined ( separator: " " ) ) ,
276- newCursor: cursorPosition,
277- modifications: extraInfo. modifications
278- )
279- }
280-
281- func getSuggestedCode(
282- forFileAt fileURL: URL ,
283- content: String ,
284- lines: [ String ] ,
285- cursorPosition: CursorPosition ,
286- tabSize: Int ,
287- indentSize: Int ,
288- usesTabsForIndentation: Bool ,
289- shouldcancelInFlightRealtimeSuggestionRequests: Bool = true
290- ) async throws -> UpdatedContent ? {
291- if shouldcancelInFlightRealtimeSuggestionRequests {
292- cancelInFlightRealtimeSuggestionRequests ( )
293- }
294- lastTriggerDate = Environment . now ( )
295- let injector = SuggestionInjector ( )
296- var lines = lines
297- var cursorPosition = cursorPosition
298-
299- let filespace = filespaces [ fileURL] ?? . init( fileURL: fileURL)
300- if filespaces [ fileURL] == nil {
301- filespaces [ fileURL] = filespace
302- }
303- var extraInfo = SuggestionInjector . ExtraInfo ( )
304- let snapshot = Filespace . Snapshot (
305- linesHash: lines. hashValue,
306- cursorPosition: cursorPosition
307- )
308-
309- injector. rejectCurrentSuggestions (
310- from: & lines,
311- cursorPosition: & cursorPosition,
312- extraInfo: & extraInfo
313- )
314-
315- filespace. suggestionSourceSnapshot = snapshot
316-
317- let completions = try await service. getCompletions (
318- fileURL: fileURL,
319- content: lines. joined ( separator: " " ) ,
320- cursorPosition: cursorPosition,
321- tabSize: tabSize,
322- indentSize: indentSize,
323- usesTabsForIndentation: usesTabsForIndentation,
324- ignoreSpaceOnlySuggestions: true
325- )
326-
327- guard filespace. suggestionSourceSnapshot == snapshot else { return nil }
328-
329- if completions. isEmpty {
330- return . init(
331- content: content,
332- newCursor: cursorPosition,
333- modifications: extraInfo. modifications
334- )
335- }
336-
337- filespace. suggestions = completions
338- injector. proposeSuggestion (
339- intoContentWithoutSuggestion: & lines,
340- completion: completions [ 0 ] ,
341- index: 0 ,
342- count: completions. count,
343- extraInfo: & extraInfo
344- )
345-
346- return . init(
347- content: String ( lines. joined ( separator: " " ) ) ,
348- newCursor: cursorPosition,
349- modifications: extraInfo. modifications
350- )
351- }
352-
353- func getNextSuggestedCode(
354- forFileAt fileURL: URL ,
355- content _: String ,
356- lines: [ String ] ,
357- cursorPosition: CursorPosition
358- ) -> UpdatedContent ? {
359- cancelInFlightRealtimeSuggestionRequests ( )
360- lastTriggerDate = Environment . now ( )
361- guard let filespace = filespaces [ fileURL] ,
362- filespace. suggestions. count > 1
363- else { return nil }
364- var cursorPosition = cursorPosition
365- filespace. suggestionIndex += 1
366- if filespace. suggestionIndex >= filespace. suggestions. endIndex {
367- filespace. suggestionIndex = 0
368- }
369-
370- let suggestion = filespace. suggestions [ filespace. suggestionIndex]
371- let injector = SuggestionInjector ( )
372- var extraInfo = SuggestionInjector . ExtraInfo ( )
373- var lines = lines
374- injector. rejectCurrentSuggestions (
375- from: & lines,
376- cursorPosition: & cursorPosition,
377- extraInfo: & extraInfo
378- )
379- injector. proposeSuggestion (
380- intoContentWithoutSuggestion: & lines,
381- completion: suggestion,
382- index: filespace. suggestionIndex,
383- count: filespace. suggestions. count,
384- extraInfo: & extraInfo
385- )
386-
387- return . init(
388- content: String ( lines. joined ( separator: " " ) ) ,
389- newCursor: cursorPosition,
390- modifications: extraInfo. modifications
391- )
392- }
393-
394- func getPreviousSuggestedCode(
395- forFileAt fileURL: URL ,
396- content _: String ,
397- lines: [ String ] ,
398- cursorPosition: CursorPosition
399- ) -> UpdatedContent ? {
400- cancelInFlightRealtimeSuggestionRequests ( )
401- lastTriggerDate = Environment . now ( )
402- guard let filespace = filespaces [ fileURL] ,
403- filespace. suggestions. count > 1
404- else { return nil }
405- var cursorPosition = cursorPosition
406- filespace. suggestionIndex -= 1
407- if filespace. suggestionIndex < 0 {
408- filespace. suggestionIndex = filespace. suggestions. endIndex - 1
409- }
410- var extraInfo = SuggestionInjector . ExtraInfo ( )
411- let suggestion = filespace. suggestions [ filespace. suggestionIndex]
412- let injector = SuggestionInjector ( )
413- var lines = lines
414- injector. rejectCurrentSuggestions (
415- from: & lines,
416- cursorPosition: & cursorPosition,
417- extraInfo: & extraInfo
418- )
419- injector. proposeSuggestion (
420- intoContentWithoutSuggestion: & lines,
421- completion: suggestion,
422- index: filespace. suggestionIndex,
423- count: filespace. suggestions. count,
424- extraInfo: & extraInfo
425- )
426-
427- return . init(
428- content: String ( lines. joined ( separator: " " ) ) ,
429- newCursor: cursorPosition,
430- modifications: extraInfo. modifications
431- )
432- }
433-
434- func getSuggestionAcceptedCode(
435- forFileAt fileURL: URL ,
436- content _: String ,
437- lines: [ String ] ,
438- cursorPosition: CursorPosition
439- ) -> UpdatedContent ? {
440- cancelInFlightRealtimeSuggestionRequests ( )
441- lastTriggerDate = Environment . now ( )
442- guard let filespace = filespaces [ fileURL] ,
443- !filespace. suggestions. isEmpty,
444- filespace. suggestionIndex >= 0 ,
445- filespace. suggestionIndex < filespace. suggestions. endIndex
446- else { return nil }
447-
448- var cursorPosition = cursorPosition
449- var extraInfo = SuggestionInjector . ExtraInfo ( )
450- var allSuggestions = filespace. suggestions
451- let suggestion = allSuggestions. remove ( at: filespace. suggestionIndex)
452- let injector = SuggestionInjector ( )
453- var lines = lines
454- injector. rejectCurrentSuggestions (
455- from: & lines,
456- cursorPosition: & cursorPosition,
457- extraInfo: & extraInfo
458- )
459- injector. acceptSuggestion (
460- intoContentWithoutSuggestion: & lines,
461- cursorPosition: & cursorPosition,
462- completion: suggestion,
463- extraInfo: & extraInfo
464- )
465-
466- Task {
467- await service. notifyAccepted ( suggestion)
468- await service. notifyRejected ( allSuggestions)
469- }
470-
471- filespaces [ fileURL] ? . reset ( )
472- return . init(
473- content: String ( lines. joined ( separator: " " ) ) ,
474- newCursor: cursorPosition,
475- modifications: extraInfo. modifications
476- )
477- }
478-
479- func getSuggestionRejectedCode(
480- forFileAt fileURL: URL ,
481- content _: String ,
482- lines: [ String ] ,
483- cursorPosition: CursorPosition
484- ) -> UpdatedContent {
485- cancelInFlightRealtimeSuggestionRequests ( )
486- lastTriggerDate = Environment . now ( )
487- let injector = SuggestionInjector ( )
488- var lines = lines
489- var cursorPosition = cursorPosition
490- var extraInfo = SuggestionInjector . ExtraInfo ( )
491- injector. rejectCurrentSuggestions (
492- from: & lines,
493- cursorPosition: & cursorPosition,
494- extraInfo: & extraInfo
495- )
496-
497- Task {
498- await service. notifyRejected ( filespaces [ fileURL] ? . suggestions ?? [ ] )
499- }
500-
501- filespaces [ fileURL] ? . reset ( )
502- return . init(
503- content: String ( lines. joined ( separator: " " ) ) ,
504- newCursor: cursorPosition,
505- modifications: extraInfo. modifications
506- )
507- }
508- }
509-
510196extension Workspace {
511197 func cleanUp( ) {
512198 for (fileURL, filespace) in filespaces {
0 commit comments