Skip to content

Commit 3587ef4

Browse files
committed
Add SuggestionServiceEventHandler
1 parent 300f457 commit 3587ef4

2 files changed

Lines changed: 33 additions & 6 deletions

File tree

Core/Sources/SuggestionService/SuggestionService.swift

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import BuiltinExtension
22
import CodeiumService
3-
import struct CopilotForXcodeKit.WorkspaceInfo
43
import enum CopilotForXcodeKit.SuggestionServiceError
4+
import struct CopilotForXcodeKit.WorkspaceInfo
55
import Foundation
66
import GitHubCopilotService
77
import Preferences
@@ -17,18 +17,21 @@ import ProExtension
1717
public protocol SuggestionServiceType: SuggestionServiceProvider {}
1818

1919
public actor SuggestionService: SuggestionServiceType {
20+
typealias Middleware = SuggestionServiceMiddleware
21+
typealias EventHandler = SuggestionServiceEventHandler
2022
public var configuration: SuggestionProvider.SuggestionServiceConfiguration {
2123
get async { await suggestionProvider.configuration }
2224
}
2325

24-
let middlewares: [SuggestionServiceMiddleware]
26+
let middlewares: [Middleware]
27+
let eventHandlers: [EventHandler]
2528

2629
let suggestionProvider: SuggestionServiceProvider
2730

2831
public init(
2932
provider: any SuggestionServiceProvider,
30-
middlewares: [SuggestionServiceMiddleware] = SuggestionServiceMiddlewareContainer
31-
.middlewares
33+
middlewares: [Middleware] = SuggestionServiceMiddlewareContainer.middlewares,
34+
eventHandlers: [EventHandler] = SuggestionServiceEventHandlerContainer.handlers
3235
) {
3336
suggestionProvider = provider
3437
self.middlewares = middlewares
@@ -67,7 +70,7 @@ public extension SuggestionService {
6770
do {
6871
var getSuggestion = suggestionProvider.getSuggestions(_:workspaceInfo:)
6972
let configuration = await configuration
70-
73+
7174
for middleware in middlewares.reversed() {
7275
getSuggestion = { [getSuggestion] request, workspaceInfo in
7376
try await middleware.getSuggestion(
@@ -79,7 +82,7 @@ public extension SuggestionService {
7982
)
8083
}
8184
}
82-
85+
8386
return try await getSuggestion(request, workspaceInfo)
8487
} catch let error as SuggestionServiceError {
8588
throw error
@@ -92,13 +95,15 @@ public extension SuggestionService {
9295
_ suggestion: SuggestionBasic.CodeSuggestion,
9396
workspaceInfo: CopilotForXcodeKit.WorkspaceInfo
9497
) async {
98+
eventHandlers.forEach { $0.didAccept(suggestion, workspaceInfo: workspaceInfo) }
9599
await suggestionProvider.notifyAccepted(suggestion, workspaceInfo: workspaceInfo)
96100
}
97101

98102
func notifyRejected(
99103
_ suggestions: [SuggestionBasic.CodeSuggestion],
100104
workspaceInfo: CopilotForXcodeKit.WorkspaceInfo
101105
) async {
106+
eventHandlers.forEach { $0.didReject(suggestion, workspaceInfo: workspaceInfo) }
102107
await suggestionProvider.notifyRejected(suggestions, workspaceInfo: workspaceInfo)
103108
}
104109

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import Foundation
2+
import SuggestionBasic
3+
import CopilotForXcodeKit
4+
5+
public protocol SuggestionServiceEventHandler {
6+
func didAccept(_ suggestion: CodeSuggestion, workspaceInfo: WorkspaceInfo)
7+
func didReject(_ suggestion: CodeSuggestion, workspaceInfo: WorkspaceInfo)
8+
}
9+
10+
public enum SuggestionServiceEventHandlerContainer {
11+
static var builtinHandlers: [SuggestionServiceEventHandler] = []
12+
13+
static var customHandlers: [SuggestionServiceEventHandler] = []
14+
15+
public static var handlers: [SuggestionServiceEventHandler] {
16+
builtinHandlers + customHandlers
17+
}
18+
19+
public static func addHandler(_ handler: SuggestionServiceEventHandler) {
20+
customHandlers.append(handler)
21+
}
22+
}

0 commit comments

Comments
 (0)