Skip to content

Commit f0c1517

Browse files
committed
Move real-time suggestion generation to PseudoCommandHandler
1 parent ea72ac6 commit f0c1517

File tree

1 file changed

+37
-6
lines changed

1 file changed

+37
-6
lines changed

Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,52 @@ struct PseudoCommandHandler {
4343
// Can't use handler if content is not available.
4444
guard
4545
let editor = await getEditorContent(sourceEditor: sourceEditor),
46-
let filespace = await getFilespace()
47-
else { return }
46+
let filespace = await getFilespace(),
47+
let (workspace, _) = try? await Workspace
48+
.fetchOrCreateWorkspaceIfNeeded(fileURL: filespace.fileURL) else { return }
4849

50+
let fileURL = filespace.fileURL
51+
let presenter = PresentInWindowSuggestionPresenter()
52+
53+
presenter.markAsProcessing(true)
54+
defer { presenter.markAsProcessing(false) }
55+
56+
// Check if the current suggestion is still valid.
4957
if await filespace.validateSuggestions(
5058
lines: editor.lines,
5159
cursorPosition: editor.cursorPosition
5260
) {
5361
return
5462
} else {
55-
PresentInWindowSuggestionPresenter().discardSuggestion(fileURL: filespace.fileURL)
63+
presenter.discardSuggestion(fileURL: filespace.fileURL)
5664
}
65+
66+
let snapshot = Filespace.Snapshot(
67+
linesHash: editor.lines.hashValue,
68+
cursorPosition: editor.cursorPosition
69+
)
70+
71+
guard await filespace.suggestionSourceSnapshot != snapshot else { return }
5772

58-
// Otherwise, get it from pseudo handler directly.
59-
let handler = WindowBaseCommandHandler()
60-
_ = try? await handler.generateRealtimeSuggestions(editor: editor)
73+
do {
74+
try await workspace.generateSuggestions(
75+
forFileAt: fileURL,
76+
editor: editor
77+
)
78+
if let sourceEditor {
79+
_ = await filespace.validateSuggestions(
80+
lines: sourceEditor.content.lines,
81+
cursorPosition: sourceEditor.content.cursorPosition
82+
)
83+
}
84+
if await filespace.presentingSuggestion != nil {
85+
presenter.presentSuggestion(fileURL: fileURL)
86+
} else {
87+
presenter.discardSuggestion(fileURL: fileURL)
88+
}
89+
} catch {
90+
return
91+
}
6192
}
6293

6394
func invalidateRealtimeSuggestionsIfNeeded(fileURL: URL, sourceEditor: SourceEditor) async {

0 commit comments

Comments
 (0)