@@ -25,73 +25,82 @@ enum ChatTabFactory {
2525
2626 let collection = [
2727 folderIfNeeded ( ChatGPTChatTab . chatBuilders ( ) , title: ChatGPTChatTab . name) ,
28- folderIfNeeded ( BrowserChatTab . chatBuilders ( externalDependency: . init(
29- getEditorContent: {
30- guard let editor = XcodeInspector . shared. focusedEditor else {
31- return . init( selectedText: " " , language: " " , fileContent: " " )
32- }
33- let content = editor. content
34- return . init(
35- selectedText: content. selectedContent,
36- language: languageIdentifierFromFileURL (
37- XcodeInspector . shared
38- . activeDocumentURL
39- )
40- . rawValue,
41- fileContent: content. content
42- )
43- } ,
44- handleCustomCommand: { command, prompt in
45- switch command. feature {
46- case let . chatWithSelection( extraSystemPrompt, _, useExtraSystemPrompt) :
47- let service = ChatService ( )
48- return try await service. processMessage (
49- systemPrompt: nil ,
50- extraSystemPrompt: ( useExtraSystemPrompt ?? false ) ? extraSystemPrompt :
51- nil ,
52- prompt: prompt
53- )
54- case let . customChat( systemPrompt, _) :
55- let service = ChatService ( )
56- return try await service. processMessage (
57- systemPrompt: systemPrompt,
58- extraSystemPrompt: nil ,
59- prompt: prompt
60- )
61- case let . singleRoundDialog(
62- systemPrompt,
63- overwriteSystemPrompt,
64- _,
65- _
66- ) :
67- let service = ChatService ( )
68- return try await service. handleSingleRoundDialogCommand (
69- systemPrompt: systemPrompt,
70- overwriteSystemPrompt: overwriteSystemPrompt ?? false ,
71- prompt: prompt
72- )
73- case let . promptToCode( extraSystemPrompt, instruction, _, _) :
74- let service = PromptToCodeService (
75- code: prompt,
76- selectionRange: . outOfScope,
77- language: . plaintext,
78- identSize: 4 ,
79- usesTabsForIndentation: true ,
80- projectRootURL: . init( fileURLWithPath: " / " ) ,
81- fileURL: . init( fileURLWithPath: " / " ) ,
82- allCode: prompt,
83- extraSystemPrompt: extraSystemPrompt,
84- generateDescriptionRequirement: false
85- )
86- try await service. modifyCode ( prompt: instruction ?? " Modify content. " )
87- return service. code
88- }
89- }
90- ) ) , title: BrowserChatTab . name) ,
28+ folderIfNeeded (
29+ BrowserChatTab . chatBuilders (
30+ externalDependency: externalDependenciesForBrowserChatTab ( )
31+ ) ,
32+ title: BrowserChatTab . name
33+ ) ,
9134 ] . compactMap { $0 }
9235
9336 return collection
9437 }
38+
39+ static func externalDependenciesForBrowserChatTab( ) -> BrowserChatTab . ExternalDependency {
40+ . init(
41+ getEditorContent: {
42+ guard let editor = XcodeInspector . shared. focusedEditor else {
43+ return . init( selectedText: " " , language: " " , fileContent: " " )
44+ }
45+ let content = editor. content
46+ return . init(
47+ selectedText: content. selectedContent,
48+ language: languageIdentifierFromFileURL (
49+ XcodeInspector . shared
50+ . activeDocumentURL
51+ )
52+ . rawValue,
53+ fileContent: content. content
54+ )
55+ } ,
56+ handleCustomCommand: { command, prompt in
57+ switch command. feature {
58+ case let . chatWithSelection( extraSystemPrompt, _, useExtraSystemPrompt) :
59+ let service = ChatService ( )
60+ return try await service. processMessage (
61+ systemPrompt: nil ,
62+ extraSystemPrompt: ( useExtraSystemPrompt ?? false ) ? extraSystemPrompt :
63+ nil ,
64+ prompt: prompt
65+ )
66+ case let . customChat( systemPrompt, _) :
67+ let service = ChatService ( )
68+ return try await service. processMessage (
69+ systemPrompt: systemPrompt,
70+ extraSystemPrompt: nil ,
71+ prompt: prompt
72+ )
73+ case let . singleRoundDialog(
74+ systemPrompt,
75+ overwriteSystemPrompt,
76+ _,
77+ _
78+ ) :
79+ let service = ChatService ( )
80+ return try await service. handleSingleRoundDialogCommand (
81+ systemPrompt: systemPrompt,
82+ overwriteSystemPrompt: overwriteSystemPrompt ?? false ,
83+ prompt: prompt
84+ )
85+ case let . promptToCode( extraSystemPrompt, instruction, _, _) :
86+ let service = PromptToCodeService (
87+ code: prompt,
88+ selectionRange: . outOfScope,
89+ language: . plaintext,
90+ identSize: 4 ,
91+ usesTabsForIndentation: true ,
92+ projectRootURL: . init( fileURLWithPath: " / " ) ,
93+ fileURL: . init( fileURLWithPath: " / " ) ,
94+ allCode: prompt,
95+ extraSystemPrompt: extraSystemPrompt,
96+ generateDescriptionRequirement: false
97+ )
98+ try await service. modifyCode ( prompt: instruction ?? " Modify content. " )
99+ return service. code
100+ }
101+ }
102+ )
103+ }
95104}
96105
97106#else
0 commit comments