From bba2311915120e66439693bcd431752b2c0e68a9 Mon Sep 17 00:00:00 2001 From: shine <1042864399@qq.com> Date: Fri, 10 Oct 2025 11:55:44 +0800 Subject: [PATCH] =?UTF-8?q?mod=20=E5=91=BD=E4=BB=A4=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/mod.go | 21 ++++++++++++--- worker/mod_worker.go | 61 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 65 insertions(+), 17 deletions(-) diff --git a/cmd/mod.go b/cmd/mod.go index 7195c72..1172b94 100644 --- a/cmd/mod.go +++ b/cmd/mod.go @@ -1,13 +1,17 @@ package cmd import ( + "complie-erlang/config" + "complie-erlang/parser/zm_lib" "complie-erlang/worker" "fmt" "github.com/spf13/cobra" "log" ) -type modSet struct{} +type modSet struct { + author string +} func (m *modSet) run(cmd *cobra.Command, args []string) { if len(args) == 0 { @@ -17,7 +21,14 @@ func (m *modSet) run(cmd *cobra.Command, args []string) { modName := args[0] 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) } @@ -32,13 +43,15 @@ func init() { Long: ` - 根据约定模板生成 -mod activity activity_test.proto -mod func test1.proto +mod activity activity_test +mod func test1 `, Run: singleSet.run, } + _ = zm_lib.PersistentFlagsStringVar(singleCmd, &singleSet.author, globalCache, "author", "st,sutong@youkia.net", "作者") + rootCmd.AddCommand(singleCmd) } diff --git a/worker/mod_worker.go b/worker/mod_worker.go index 565f11e..e3a9917 100644 --- a/worker/mod_worker.go +++ b/worker/mod_worker.go @@ -16,7 +16,7 @@ import ( type ModWorker interface { Name() string - LoadCfg(BaseSet, []string) error + LoadCfg(BaseSet, []string, []config.DefaultArg) error OutPutFiles() ([]string, error) } @@ -25,7 +25,7 @@ type BaseSet struct { 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") if err != nil { @@ -62,7 +62,7 @@ func ModWorkerRun(name string, args []string) error { for _, worker := range AllWorkers() { if worker.Name() == modWorkerName { 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) } log.Printf("[info] 初始化完成 开始生成输出。。。") @@ -100,7 +100,8 @@ func (mod *ProtoModWorker) Name() string { 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.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) { + var dirMap = make(map[string]string) for _, dir := range mod.set.Conf.MakeDir { dir.Path = filepath.Join(mod.pluginPath, fmt.Sprintf(dir.Path, mod.Args[0])) log.Println("[info] make outDir:", dir.Path) - //if err := os.MkdirAll(dir.Path, os.ModePerm); err != nil { - // return nil, err - //} + dirMap[dir.Name] = dir.Path + if err := os.MkdirAll(dir.Path, os.ModePerm); err != nil { + return nil, err + } } + var result []string 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 { 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 { - var templatesArgs = make(map[string]any) +func (mod *ProtoModWorker) FormatArgs(baseArgs map[string]any) map[string]any { + var templatesArgs = baseArgs var defaultArgs = make(map[string]any) for _, defaultArg := range mod.DefaultArgs {