@@ -26,6 +26,11 @@ class RealtimeSuggestionControllerBenchmarkManager: BenchmarkManager {
2626 @WorkspaceActor
2727 private let workspacePool : WorkspacePool
2828
29+ private let isMultiFileEnabledSubject = CurrentValueSubject < Bool , Never > ( true )
30+ var isMultiFileEnabled : AnyPublisher < Bool , Never > {
31+ isMultiFileEnabledSubject. eraseToAnyPublisher ( )
32+ }
33+
2934 init ( benchmarkSettingsRepository: BenchmarkSettingsRepository ) {
3035 @Dependency ( \. workspacePool) var workspacePool
3136 BuiltinExtensionManager . shared. setupExtensions ( [
@@ -67,7 +72,14 @@ class RealtimeSuggestionControllerBenchmarkManager: BenchmarkManager {
6772 workspaceProvider: ManualWorkspaceProvider ( workspace: workspace) ,
6873 parser: SwiftProgrammingLanguageSyntaxParser ( )
6974 )
70- let relevantSymbols = await multiFileContextManager. retrieveRelevantSymbolsForFileContent ( content: content)
75+ let relevantSymbols : [ SymbolContent ] = await {
76+ if isMultiFileEnabledSubject. value {
77+ let symbols = await multiFileContextManager. retrieveRelevantSymbolsForFileContent ( content: content)
78+ return Array ( symbols. values)
79+ } else {
80+ return [ ]
81+ }
82+ } ( )
7183
7284 let suggestionRequest = SuggestionProvider . SuggestionRequest (
7385 fileURL: entrypoint. fileURL,
@@ -80,7 +92,7 @@ class RealtimeSuggestionControllerBenchmarkManager: BenchmarkManager {
8092 tabSize: 4 ,
8193 indentSize: 4 ,
8294 usesTabsForIndentation: false ,
83- relevantCodeSnippets: [ ]
95+ relevantCodeSnippets: relevantSymbols . mapToRelevantCodeSnippets ( )
8496 )
8597 let workspaceInfo = WorkspaceInfo ( workspaceURL: xcodeWorkspaceFileURL, projectURL: benchmarkDirectory)
8698 do {
@@ -92,7 +104,7 @@ class RealtimeSuggestionControllerBenchmarkManager: BenchmarkManager {
92104 return . init(
93105 suggestion: firstSuggestion,
94106 fileURL: entrypoint. fileURL,
95- relevantSymbolsFromRequest: Array ( relevantSymbols. values )
107+ relevantSymbolsFromRequest: relevantSymbols
96108 )
97109 } catch {
98110 print ( " CK \( error) " )
@@ -182,9 +194,20 @@ class RealtimeSuggestionControllerBenchmarkManager: BenchmarkManager {
182194 }
183195 }
184196
197+ let contextFolderName = isMultiFileEnabledSubject. value ? " with context " : " without context "
198+ let contextFolder = outputBenchmarkDir. appendingPathComponent ( contextFolderName, isDirectory: true )
199+ if !fileManager. fileExists ( atPath: contextFolder. path, isDirectory: & isDirectory) || !isDirectory. boolValue {
200+ do {
201+ try fileManager. createDirectory ( at: contextFolder, withIntermediateDirectories: true , attributes: nil )
202+ } catch {
203+ print ( " Failed to create context directory: " , error)
204+ return
205+ }
206+ }
207+
185208 let timestamp = ISO8601DateFormatter ( ) . string ( from: Date ( ) )
186209 let reformattedTimestamp = timestamp. replacingOccurrences ( of: " : " , with: " - " )
187- let outputFileURL = outputBenchmarkDir . appendingPathComponent ( " Task- \( taskNumber) - \( reformattedTimestamp) .json " )
210+ let outputFileURL = contextFolder . appendingPathComponent ( " Task- \( taskNumber) - \( reformattedTimestamp) .json " )
188211
189212 do {
190213 let dto = suggestion. toStoredDTO ( timestamp: timestamp)
@@ -249,6 +272,11 @@ class RealtimeSuggestionControllerBenchmarkManager: BenchmarkManager {
249272
250273 return nil
251274 }
275+
276+ @MainActor
277+ func updateMultiFileContextState( _ newValue: Bool ) {
278+ isMultiFileEnabledSubject. send ( newValue)
279+ }
252280}
253281
254282struct MetadataDTO : Codable {
@@ -419,3 +447,15 @@ extension SymbolContent {
419447 )
420448 }
421449}
450+
451+ extension Array where Element == SymbolContent {
452+ func mapToRelevantCodeSnippets( ) -> [ SuggestionProvider . RelevantCodeSnippet ] {
453+ map { symbol in
454+ . init(
455+ content: symbol. content,
456+ priority: 0 ,
457+ filePath: symbol. fileURL
458+ )
459+ }
460+ }
461+ }
0 commit comments