58 lines
2.0 KiB
Go
58 lines
2.0 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
"path/filepath"
|
||
"strings"
|
||
)
|
||
|
||
func writeFile(path, content string) error {
|
||
dir := filepath.Dir(path)
|
||
// #nosec G301,G703 -- path is built by makeFile from fixed scaffold directories and a name that rejects separators/".."; 0755 is intentional for generated dirs.
|
||
if err := os.MkdirAll(dir, 0755); err != nil {
|
||
return fmt.Errorf("创建目录失败: %w", err)
|
||
}
|
||
|
||
// #nosec G306,G703 -- path is built by makeFile from fixed scaffold directories and a validated name; 0644 is intentional for generated source files.
|
||
if err := os.WriteFile(path, []byte(content), 0644); err != nil {
|
||
return fmt.Errorf("写入文件失败: %w", err)
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func fileExists(path string) bool {
|
||
// #nosec G703 -- path is built by makeFile from fixed scaffold directories and a name that rejects separators/"..".
|
||
_, err := os.Stat(path)
|
||
if err == nil {
|
||
return true
|
||
}
|
||
// 仅当"不存在"才返回 false;权限错误等其它错误视为"可能存在/不可覆写",
|
||
// 避免把无权限访问的路径误判为可创建(M20:原 !os.IsNotExist 把权限错误当存在,
|
||
// 反而安全;但语义模糊,显式区分更清晰)。
|
||
return !os.IsNotExist(err)
|
||
}
|
||
|
||
func currentModule() string {
|
||
data, err := os.ReadFile("go.mod")
|
||
if err != nil {
|
||
return "xlgo"
|
||
}
|
||
for _, line := range strings.Split(string(data), "\n") {
|
||
line = strings.TrimSpace(line)
|
||
if strings.HasPrefix(line, "module ") {
|
||
return strings.TrimSpace(strings.TrimPrefix(line, "module "))
|
||
}
|
||
}
|
||
return "xlgo"
|
||
}
|
||
|
||
func replaceModuleImports(content string) string {
|
||
module := currentModule()
|
||
content = strings.ReplaceAll(content, "\"xlgo/model\"", fmt.Sprintf("\"%s/model\"", module))
|
||
content = strings.ReplaceAll(content, "\"xlgo/repository\"", fmt.Sprintf("\"%s/repository\"", module))
|
||
content = strings.ReplaceAll(content, "\"xlgo/database\"", fmt.Sprintf("\"%s/database\"", module))
|
||
content = strings.ReplaceAll(content, "\"xlgo/response\"", "\"github.com/EthanCodeCraft/xlgo-core/response\"")
|
||
return content
|
||
}
|