66 "os"
77 "path/filepath"
88 "strings"
9+ "time"
910
1011 "github.com/fatih/color"
1112 "github.com/spf13/cobra"
@@ -27,14 +28,15 @@ func MergeAssistantCode() *cobra.Command {
2728 Use : "merge" ,
2829 Short : "Merge AI assistant generated code into source Go file" ,
2930 Long : "Merge AI assistant generated code into source Go file." ,
30- Example : color .HiBlackString (` # Merge deepseek generated code into source Go file in specified directory
31+ Example : color .HiBlackString (` # Merge DeepSeek- generated code into Go source files under the specified directory
3132 sponge assistant merge --type=deepseek --dir=/path/to/directory
3233
33- # Merge chatgpt generated code into source Go file in specified directory
34- sponge assistant merge --type=chatgpt --dir=/path/to/directory
34+ # Merge ChatGPT- generated code into the specified Go source file
35+ sponge assistant merge --type=chatgpt --dir=/path/to/xxx.go
3536
36- # Merge gemini generated code into source Go file in specified directory
37- sponge assistant merge --type=gemini --dir=/path/to/directory` ),
37+ # Merge Gemini-generated code into Go source files under the specified directory,
38+ # and remove assistant-generated code after the merge
39+ sponge assistant merge --type=gemini --dir=/path/to/directory --is-clean=true` ),
3840 SilenceErrors : true ,
3941 SilenceUsage : true ,
4042 RunE : func (cmd * cobra.Command , args []string ) error {
@@ -72,7 +74,8 @@ func MergeAssistantCode() *cobra.Command {
7274 var deleteFiles []string
7375 backupDir := getBackupDir ()
7476 if len (mergeCodes ) > 0 {
75- fmt .Printf ("Merged to Go files:\n " )
77+ fmt .Printf ("Merged Time: %s\n \n " , time .Now ().Format (time .DateTime ))
78+ fmt .Printf ("Merged Files:\n " )
7679 for srcFile , code := range mergeCodes {
7780 backupFile (srcFile , backupDir )
7881 if err = os .WriteFile (srcFile , []byte (code ), 0666 ); err != nil {
@@ -90,7 +93,7 @@ func MergeAssistantCode() *cobra.Command {
9093 }
9194
9295 if len (mergeCodes ) > 0 {
93- fmt .Printf ("\n [Tip] You can view the pre- merge Go code files here:\n %s\n \n " , backupDir )
96+ fmt .Printf ("\n [Tip] Backed up Go files, you can restore the pre merge Go code from here:\n %s\n \n " , backupDir )
9497 }
9598
9699 return nil
@@ -99,8 +102,8 @@ func MergeAssistantCode() *cobra.Command {
99102
100103 cmd .Flags ().StringVarP (& assistantType , "type" , "t" , "" , "assistant type, supported types: chatgpt, deepseek, gemini" )
101104 _ = cmd .MarkFlagRequired ("type" )
102- cmd .Flags ().StringVarP (& dir , "dir" , "d" , ". " , "input directory" )
103- cmd .Flags ().StringSliceVarP (& files , "file" , "f" , nil , "specified Go files" )
105+ cmd .Flags ().StringVarP (& dir , "dir" , "d" , "" , "go project directory" )
106+ cmd .Flags ().StringSliceVarP (& files , "file" , "f" , nil , "specified Go files or generated assistant code files " )
104107 cmd .Flags ().BoolVarP (& isClean , "is-clean" , "c" , false , "clean up assistant generated code after merge" )
105108
106109 return cmd
@@ -116,8 +119,8 @@ type mergeParams struct {
116119func (m * mergeParams ) parseAssistantFiles () (map [string ]string , error ) {
117120 fileMap := make (map [string ]string ) // srcFile -> genFile
118121
119- for _ , genFile := range m .specifiedFiles {
120- srcFile , ok := m .getSourceFile ( genFile )
122+ for _ , file := range m .specifiedFiles {
123+ srcFile , genFile , ok := m .getGoAndMDFile ( file , m . assistantType )
121124 if ok {
122125 fileMap [srcFile ] = genFile
123126 }
@@ -152,6 +155,30 @@ func (m *mergeParams) getSourceFile(file string) (string, bool) {
152155 return "" , false
153156}
154157
158+ func (m * mergeParams ) getGoAndMDFile (file string , assistantType string ) (goFile string , mdFile string , ok bool ) {
159+ if strings .HasSuffix (file , ".go" ) {
160+ goFile = file
161+ mdFile = file + "." + assistantType + ".md"
162+ if gofile .IsExists (mdFile ) {
163+ ok = true
164+ } else {
165+ ok = false
166+ }
167+ return goFile , mdFile , ok
168+ } else if strings .HasSuffix (file , getAssistantSuffixed (m .assistantType )) {
169+ mdFile = file
170+ goFile = strings .TrimSuffix (file , getAssistantSuffixed (m .assistantType )) + ".go"
171+ if gofile .IsExists (goFile ) {
172+ ok = true
173+ } else {
174+ ok = false
175+ }
176+ return goFile , mdFile , ok
177+ }
178+
179+ return "" , "" , false
180+ }
181+
155182func (m * mergeParams ) mergeGoFile (srcFile string , genFile string ) (string , error ) {
156183 srcCode , err := os .ReadFile (srcFile )
157184 if err != nil {
0 commit comments