Skip to content

Commit ad1816c

Browse files
committed
Add new suggestionFeatureProvider key
1 parent bc458cb commit ad1816c

File tree

6 files changed

+45
-10
lines changed

6 files changed

+45
-10
lines changed

Core/Package.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,9 @@ let package = Package(
186186
dependencies: [
187187
.product(name: "SuggestionModel", package: "Tool"),
188188
.product(name: "SuggestionProvider", package: "Tool")
189-
]
189+
].pro([
190+
"ProExtension",
191+
])
190192
),
191193
.target(
192194
name: "SuggestionInjector",

Core/Sources/HostApp/FeatureSettings/SuggestionSettingsView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ struct SuggestionSettingsView: View {
5656
ForEach(BuiltInSuggestionFeatureProvider.allCases, id: \.rawValue) {
5757
switch $0 {
5858
case .gitHubCopilot:
59-
Text("GitHub Copilot").tag($0)
59+
Text("GitHub Copilot").tag(SuggestionFeatureProvider.builtIn($0))
6060
case .codeium:
61-
Text("Codeium").tag($0)
61+
Text("Codeium").tag(SuggestionFeatureProvider.builtIn($0))
6262
}
6363
}
6464
} label: {

Core/Sources/SuggestionService/SuggestionService.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import SuggestionModel
44
import SuggestionProvider
55
import UserDefaultsObserver
66

7+
#if canImport(ProExtension)
8+
import ProExtension
9+
#endif
10+
711
public protocol SuggestionServiceType: SuggestionServiceProvider {}
812

913
public actor SuggestionService: SuggestionServiceType {
@@ -15,13 +19,13 @@ public actor SuggestionService: SuggestionServiceType {
1519
let onServiceLaunched: (SuggestionServiceProvider) -> Void
1620
let providerChangeObserver = UserDefaultsObserver(
1721
object: UserDefaults.shared,
18-
forKeyPaths: [UserDefaultPreferenceKeys().suggestionFeatureProvider.key],
22+
forKeyPaths: [UserDefaultPreferenceKeys().oldSuggestionFeatureProvider.key],
1923
context: nil
2024
)
2125

2226
lazy var suggestionProvider: SuggestionServiceProvider = buildService()
2327

24-
var serviceType: BuiltInSuggestionFeatureProvider {
28+
var serviceType: SuggestionFeatureProvider {
2529
UserDefaults.shared.value(for: \.suggestionFeatureProvider)
2630
}
2731

@@ -41,13 +45,19 @@ public actor SuggestionService: SuggestionServiceType {
4145
}
4246

4347
func buildService() -> SuggestionServiceProvider {
48+
#if canImport(ProExtension)
49+
if let provider = ProExtension.suggestionProviderFactory(serviceType) {
50+
return provider
51+
}
52+
#endif
53+
4454
switch serviceType {
45-
case .codeium:
55+
case .builtIn(.codeium):
4656
return CodeiumSuggestionProvider(
4757
projectRootURL: projectRootURL,
4858
onServiceLaunched: onServiceLaunched
4959
)
50-
case .gitHubCopilot:
60+
case .builtIn(.gitHubCopilot), .extension:
5161
return GitHubCopilotSuggestionProvider(
5262
projectRootURL: projectRootURL,
5363
onServiceLaunched: onServiceLaunched

Tool/Sources/Preferences/Keys.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,9 +286,13 @@ public extension UserDefaultPreferenceKeys {
286286
// MARK: - Suggestion
287287

288288
public extension UserDefaultPreferenceKeys {
289-
var suggestionFeatureProvider: PreferenceKey<BuiltInSuggestionFeatureProvider> {
289+
var oldSuggestionFeatureProvider: DeprecatedPreferenceKey<BuiltInSuggestionFeatureProvider> {
290290
.init(defaultValue: .gitHubCopilot, key: "SuggestionFeatureProvider")
291291
}
292+
293+
var suggestionFeatureProvider: PreferenceKey<SuggestionFeatureProvider> {
294+
.init(defaultValue: .builtIn(.gitHubCopilot), key: "NewSuggestionFeatureProvider")
295+
}
292296

293297
var realtimeSuggestionToggle: PreferenceKey<Bool> {
294298
.init(defaultValue: true, key: "RealtimeSuggestionToggle")

Tool/Sources/Preferences/Types/SuggestionFeatureProvider.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,23 @@ public enum BuiltInSuggestionFeatureProvider: Int, CaseIterable, Codable {
55
case codeium
66
}
77

8-
public enum SuggestionFeatureProvider: Codable {
8+
public enum SuggestionFeatureProvider: Codable, RawRepresentable, Hashable {
99
case builtIn(BuiltInSuggestionFeatureProvider)
10-
case extended(name: String, bundleIdentifier: String)
10+
case `extension`(name: String, bundleIdentifier: String)
11+
12+
public init?(rawValue: String) {
13+
guard let data = rawValue.data(using: .utf8),
14+
let value = try? JSONDecoder().decode(Self.self, from: data)
15+
else { return nil }
16+
17+
self = value
18+
}
19+
20+
public var rawValue: String {
21+
if let data = try? JSONEncoder().encode(self) {
22+
return String(data: data, encoding: .utf8) ?? ""
23+
}
24+
return ""
25+
}
1126
}
1227

Tool/Sources/Preferences/UserDefaults.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ public extension UserDefaults {
2121
shared.setupDefaultValue(for: \.runNodeWith, defaultValue: .env)
2222
shared.setupDefaultValue(for: \.chatModels)
2323
shared.setupDefaultValue(for: \.embeddingModels)
24+
shared.setupDefaultValue(
25+
for: \.suggestionFeatureProvider,
26+
defaultValue: .builtIn(shared.value(for: \.oldSuggestionFeatureProvider))
27+
)
2428
}
2529
}
2630

0 commit comments

Comments
 (0)