mod 命令完善

This commit is contained in:
2025-10-10 11:55:44 +08:00
parent acd601f3ca
commit bba2311915
2 changed files with 65 additions and 17 deletions
+17 -4
View File
@@ -1,13 +1,17 @@
package cmd package cmd
import ( import (
"complie-erlang/config"
"complie-erlang/parser/zm_lib"
"complie-erlang/worker" "complie-erlang/worker"
"fmt" "fmt"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"log" "log"
) )
type modSet struct{} type modSet struct {
author string
}
func (m *modSet) run(cmd *cobra.Command, args []string) { func (m *modSet) run(cmd *cobra.Command, args []string) {
if len(args) == 0 { if len(args) == 0 {
@@ -17,7 +21,14 @@ func (m *modSet) run(cmd *cobra.Command, args []string) {
modName := args[0] modName := args[0]
modArgs := args[1:] modArgs := args[1:]
if err := worker.ModWorkerRun(modName, modArgs); err != nil { var DefaultArgs []config.DefaultArg
DefaultArgs = append(DefaultArgs, config.DefaultArg{
Key: "Author",
Value: m.author,
})
if err := worker.ModWorkerRun(modName, modArgs, DefaultArgs); err != nil {
log.Printf("[error] mod worker run error: %v", err) log.Printf("[error] mod worker run error: %v", err)
} }
@@ -32,13 +43,15 @@ func init() {
Long: ` Long: `
- 根据约定模板生成 - 根据约定模板生成
mod activity activity_test.proto mod activity activity_test
mod func test1.proto mod func test1
`, `,
Run: singleSet.run, Run: singleSet.run,
} }
_ = zm_lib.PersistentFlagsStringVar(singleCmd, &singleSet.author, globalCache, "author", "st,sutong@youkia.net", "作者")
rootCmd.AddCommand(singleCmd) rootCmd.AddCommand(singleCmd)
} }
+48 -13
View File
@@ -16,7 +16,7 @@ import (
type ModWorker interface { type ModWorker interface {
Name() string Name() string
LoadCfg(BaseSet, []string) error LoadCfg(BaseSet, []string, []config.DefaultArg) error
OutPutFiles() ([]string, error) OutPutFiles() ([]string, error)
} }
@@ -25,7 +25,7 @@ type BaseSet struct {
Conf config.ModConfig Conf config.ModConfig
} }
func ModWorkerRun(name string, args []string) error { func ModWorkerRun(name string, args []string, DefaultArgs []config.DefaultArg) error {
xmlPath, err := zm_lib.FindPathByExecutable("./mod_config.yaml") xmlPath, err := zm_lib.FindPathByExecutable("./mod_config.yaml")
if err != nil { if err != nil {
@@ -62,7 +62,7 @@ func ModWorkerRun(name string, args []string) error {
for _, worker := range AllWorkers() { for _, worker := range AllWorkers() {
if worker.Name() == modWorkerName { if worker.Name() == modWorkerName {
log.Printf("[info] 初始化开始。。。") log.Printf("[info] 初始化开始。。。")
if err := worker.LoadCfg(baseSet, args); err != nil { if err := worker.LoadCfg(baseSet, args, DefaultArgs); err != nil {
return fmt.Errorf("初始化 Err:%v", err) return fmt.Errorf("初始化 Err:%v", err)
} }
log.Printf("[info] 初始化完成 开始生成输出。。。") log.Printf("[info] 初始化完成 开始生成输出。。。")
@@ -100,7 +100,8 @@ func (mod *ProtoModWorker) Name() string {
return "proto" return "proto"
} }
func (mod *ProtoModWorker) LoadCfg(set BaseSet, Args []string) error { func (mod *ProtoModWorker) LoadCfg(set BaseSet, Args []string, DefaultArgs []config.DefaultArg) error {
mod.DefaultArgs = DefaultArgs
mod.set = set mod.set = set
mod.Args = Args mod.Args = Args
log.Println("[info] 加载配置 set:", set.Conf, "args:", Args) log.Println("[info] 加载配置 set:", set.Conf, "args:", Args)
@@ -147,28 +148,62 @@ func (mod *ProtoModWorker) LoadCfg(set BaseSet, Args []string) error {
} }
func (mod *ProtoModWorker) OutPutFiles() ([]string, error) { func (mod *ProtoModWorker) OutPutFiles() ([]string, error) {
var dirMap = make(map[string]string)
for _, dir := range mod.set.Conf.MakeDir { for _, dir := range mod.set.Conf.MakeDir {
dir.Path = filepath.Join(mod.pluginPath, fmt.Sprintf(dir.Path, mod.Args[0])) dir.Path = filepath.Join(mod.pluginPath, fmt.Sprintf(dir.Path, mod.Args[0]))
log.Println("[info] make outDir:", dir.Path) log.Println("[info] make outDir:", dir.Path)
//if err := os.MkdirAll(dir.Path, os.ModePerm); err != nil { dirMap[dir.Name] = dir.Path
// return nil, err if err := os.MkdirAll(dir.Path, os.ModePerm); err != nil {
//} return nil, err
}
} }
var result []string
for _, outFs := range mod.set.Conf.OutFiles { for _, outFs := range mod.set.Conf.OutFiles {
log.Println("[info] make file:", fmt.Sprintf(outFs.FileName, mod.Args[0]))
template, err := mod.templates.ExecuteTemplate(outFs.ContentTemplate, mod.FormatArgs()) filename := fmt.Sprintf(outFs.FileName, mod.Args[0])
dir, is := dirMap[outFs.BaseDir]
if !is {
log.Println("[info] no find outDir:", outFs.BaseDir, dirMap)
dir = filepath.Join(mod.pluginPath, fmt.Sprintf(outFs.BaseDir, mod.Args[0]))
}
filePath := filepath.Join(dir, filename)
log.Println("[info] make file:", filePath, dir)
result = append(result, filePath)
var baseArgs = map[string]any{
"Module": filepath.Base(filename)[:len(filepath.Base(filename))-len(filepath.Ext(filename))],
"Desc": mod.Args,
}
template, err := mod.templates.ExecuteTemplate(outFs.ContentTemplate, mod.FormatArgs(baseArgs))
if err != nil { if err != nil {
return nil, err return nil, err
} }
fmt.Printf("\n\n >:\n%s \n\n", template) // fmt.Printf("\n\n >:\n%s \n\n", template)
_, err = os.Stat(filePath)
if err == nil {
log.Printf("[warn] 文件已存在: %s:1", filePath)
continue
}
if !os.IsNotExist(err) {
return nil, err
}
if err = os.WriteFile(filePath, []byte(template), os.ModePerm); err != nil {
return nil, err
}
} }
return nil, nil return result, nil
} }
func (mod *ProtoModWorker) FormatArgs() map[string]any { func (mod *ProtoModWorker) FormatArgs(baseArgs map[string]any) map[string]any {
var templatesArgs = make(map[string]any) var templatesArgs = baseArgs
var defaultArgs = make(map[string]any) var defaultArgs = make(map[string]any)
for _, defaultArg := range mod.DefaultArgs { for _, defaultArg := range mod.DefaultArgs {