diff --git a/tools/goctl/api/gogen/gen.go b/tools/goctl/api/gogen/gen.go index 74ea9aa6..ff3386cc 100644 --- a/tools/goctl/api/gogen/gen.go +++ b/tools/goctl/api/gogen/gen.go @@ -28,7 +28,6 @@ var tmpDir = path.Join(os.TempDir(), "goctl") func GoCommand(c *cli.Context) error { apiFile := c.String("api") dir := c.String("dir") - force := c.Bool("force") if len(apiFile) == 0 { return errors.New("missing -api") } @@ -36,10 +35,10 @@ func GoCommand(c *cli.Context) error { return errors.New("missing -dir") } - return DoGenProject(apiFile, dir, force) + return DoGenProject(apiFile, dir) } -func DoGenProject(apiFile, dir string, force bool) error { +func DoGenProject(apiFile, dir string) error { p, err := parser.NewParser(apiFile) if err != nil { return err @@ -54,9 +53,9 @@ func DoGenProject(apiFile, dir string, force bool) error { logx.Must(genConfig(dir, api)) logx.Must(genMain(dir, api)) logx.Must(genServiceContext(dir, api)) - logx.Must(genTypes(dir, api, force)) + logx.Must(genTypes(dir, api)) logx.Must(genHandlers(dir, api)) - logx.Must(genRoutes(dir, api, force)) + logx.Must(genRoutes(dir, api)) logx.Must(genLogic(dir, api)) if err := backupAndSweep(apiFile); err != nil { diff --git a/tools/goctl/api/gogen/gen_test.go b/tools/goctl/api/gogen/gen_test.go index 32682e4b..6cc4995e 100644 --- a/tools/goctl/api/gogen/gen_test.go +++ b/tools/goctl/api/gogen/gen_test.go @@ -32,7 +32,7 @@ type Response struct { @server( // C0 - group: greet + group: greet/s1 ) // C1 service A-api { @@ -43,10 +43,8 @@ service A-api { get /greet/from/:name(Request) returns (Response) // hello // C4 - @server( - handler: NoResponseHandler // C5 - ) - get /greet/get(Request) returns + @handler NoResponseHandler // C5 + get /greet/get(Request) } ` @@ -504,7 +502,8 @@ func TestHasImportApi(t *testing.T) { func validate(t *testing.T, api string) { dir := "_go" - err := DoGenProject(api, dir, true) + os.RemoveAll(dir) + err := DoGenProject(api, dir) defer os.RemoveAll(dir) assert.Nil(t, err) filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { diff --git a/tools/goctl/api/gogen/genroutes.go b/tools/goctl/api/gogen/genroutes.go index d63d3dfa..cb4edde5 100644 --- a/tools/goctl/api/gogen/genroutes.go +++ b/tools/goctl/api/gogen/genroutes.go @@ -3,6 +3,7 @@ package gogen import ( "bytes" "fmt" + "os" "path" "sort" "strings" @@ -61,7 +62,7 @@ type ( } ) -func genRoutes(dir string, api *spec.ApiSpec, force bool) error { +func genRoutes(dir string, api *spec.ApiSpec) error { var builder strings.Builder groups, err := getRoutes(api) if err != nil { @@ -121,11 +122,7 @@ func genRoutes(dir string, api *spec.ApiSpec, force bool) error { } filename := path.Join(dir, handlerDir, routesFilename) - if !force { - if err := util.RemoveOrQuit(filename); err != nil { - return err - } - } + os.Remove(filename) fp, created, err := apiutil.MaybeCreateFile(dir, handlerDir, routesFilename) if err != nil { @@ -163,8 +160,7 @@ func genRouteImports(parentPkg string, api *spec.ApiSpec) string { continue } } - importSet.AddStr(fmt.Sprintf("%s \"%s\"", folder, - util.JoinPackages(parentPkg, handlerDir, folder))) + importSet.AddStr(fmt.Sprintf("%s \"%s\"", toPrefix(folder), util.JoinPackages(parentPkg, handlerDir, folder))) } } imports := importSet.KeysStr() @@ -187,11 +183,11 @@ func getRoutes(api *spec.ApiSpec) ([]group, error) { handler = getHandlerBaseName(handler) + "Handler(serverCtx)" folder, ok := apiutil.GetAnnotationValue(r.Annotations, "server", groupProperty) if ok { - handler = folder + "." + strings.ToUpper(handler[:1]) + handler[1:] + handler = toPrefix(folder) + "." + strings.ToUpper(handler[:1]) + handler[1:] } else { folder, ok = apiutil.GetAnnotationValue(g.Annotations, "server", groupProperty) if ok { - handler = folder + "." + strings.ToUpper(handler[:1]) + handler[1:] + handler = toPrefix(folder) + "." + strings.ToUpper(handler[:1]) + handler[1:] } } groupedRoutes.routes = append(groupedRoutes.routes, route{ @@ -215,3 +211,7 @@ func getRoutes(api *spec.ApiSpec) ([]group, error) { return routes, nil } + +func toPrefix(folder string) string { + return strings.ReplaceAll(folder, "/", "") +} diff --git a/tools/goctl/api/gogen/gentypes.go b/tools/goctl/api/gogen/gentypes.go index 99469ffe..c720b650 100644 --- a/tools/goctl/api/gogen/gentypes.go +++ b/tools/goctl/api/gogen/gentypes.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "os" "path" "strings" "text/template" @@ -42,18 +43,14 @@ func BuildTypes(types []spec.Type) (string, error) { return builder.String(), nil } -func genTypes(dir string, api *spec.ApiSpec, force bool) error { +func genTypes(dir string, api *spec.ApiSpec) error { val, err := BuildTypes(api.Types) if err != nil { return err } filename := path.Join(dir, typesDir, typesFile) - if !force { - if err := util.RemoveOrQuit(filename); err != nil { - return err - } - } + os.Remove(filename) fp, created, err := apiutil.MaybeCreateFile(dir, typesDir, typesFile) if err != nil { diff --git a/tools/goctl/api/new/newservice.go b/tools/goctl/api/new/newservice.go index e448db3b..b5f506c5 100644 --- a/tools/goctl/api/new/newservice.go +++ b/tools/goctl/api/new/newservice.go @@ -58,6 +58,6 @@ func NewService(c *cli.Context) error { return err } - err = gogen.DoGenProject(apiFilePath, abs, true) + err = gogen.DoGenProject(apiFilePath, abs) return err } diff --git a/tools/goctl/api/parser/entity.go b/tools/goctl/api/parser/entity.go index 303fd815..eba95a51 100644 --- a/tools/goctl/api/parser/entity.go +++ b/tools/goctl/api/parser/entity.go @@ -76,7 +76,7 @@ memberLoop: } switch { case isSpace(next): - if builder.Len() > 0 { + if builder.Len() > 0 && annoName == "" { annoName = builder.String() builder.Reset() } @@ -84,6 +84,7 @@ memberLoop: if builder.Len() == 0 { return errors.New("invalid annotation format") } + if len(annoName) > 0 { value := builder.String() if value != string(leftParenthesis) { diff --git a/tools/goctl/goctl.go b/tools/goctl/goctl.go index 74ee6f12..224be3a8 100644 --- a/tools/goctl/goctl.go +++ b/tools/goctl/goctl.go @@ -98,10 +98,6 @@ var ( Name: "api", Usage: "the api file", }, - cli.BoolFlag{ - Name: "force", - Usage: "force override the exist files", - }, }, Action: gogen.GoCommand, },