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
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)
}
+48 -13
View File
@@ -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
}
return nil, nil
if !os.IsNotExist(err) {
return nil, err
}
if err = os.WriteFile(filePath, []byte(template), os.ModePerm); err != nil {
return nil, err
}
}
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 {