feature: refactor api parse to g4 (#365)
* feature: refactor api parse to g4 * new g4 parser * add CHANGE_LOG.MD * refactor * fix byte bug * refactor * optimized * optimized * revert * update readme.md * update readme.md * update readme.md * update readme.md * remove no need * fix java gen * add upgrade * resolve confilits Co-authored-by: anqiansong <anqiansong@xiaoheiban.cn>
This commit is contained in:
@@ -72,15 +72,15 @@ func getParentPackage(dir string) (string, error) {
|
||||
return filepath.ToSlash(filepath.Join(projectCtx.Path, strings.TrimPrefix(projectCtx.WorkDir, projectCtx.Dir))), nil
|
||||
}
|
||||
|
||||
func writeProperty(writer io.Writer, name, tp, tag, comment string, indent int) error {
|
||||
func writeProperty(writer io.Writer, name, tag, comment string, tp spec.Type, indent int) error {
|
||||
util.WriteIndent(writer, indent)
|
||||
var err error
|
||||
if len(comment) > 0 {
|
||||
comment = strings.TrimPrefix(comment, "//")
|
||||
comment = "//" + comment
|
||||
_, err = fmt.Fprintf(writer, "%s %s %s %s\n", strings.Title(name), tp, tag, comment)
|
||||
_, err = fmt.Fprintf(writer, "%s %s %s %s\n", strings.Title(name), tp.Name(), tag, comment)
|
||||
} else {
|
||||
_, err = fmt.Fprintf(writer, "%s %s %s\n", strings.Title(name), tp, tag)
|
||||
_, err = fmt.Fprintf(writer, "%s %s %s\n", strings.Title(name), tp.Name(), tag)
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -88,11 +88,13 @@ func writeProperty(writer io.Writer, name, tp, tag, comment string, indent int)
|
||||
func getAuths(api *spec.ApiSpec) []string {
|
||||
authNames := collection.NewSet()
|
||||
for _, g := range api.Service.Groups {
|
||||
if value, ok := util.GetAnnotationValue(g.Annotations, "server", "jwt"); ok {
|
||||
authNames.Add(value)
|
||||
jwt := g.GetAnnotation("jwt")
|
||||
if len(jwt) > 0 {
|
||||
authNames.Add(jwt)
|
||||
}
|
||||
if value, ok := util.GetAnnotationValue(g.Annotations, "server", "signature"); ok {
|
||||
authNames.Add(value)
|
||||
signature := g.GetAnnotation("signature")
|
||||
if len(signature) > 0 {
|
||||
authNames.Add(signature)
|
||||
}
|
||||
}
|
||||
return authNames.KeysStr()
|
||||
@@ -101,8 +103,9 @@ func getAuths(api *spec.ApiSpec) []string {
|
||||
func getMiddleware(api *spec.ApiSpec) []string {
|
||||
result := collection.NewSet()
|
||||
for _, g := range api.Service.Groups {
|
||||
if value, ok := util.GetAnnotationValue(g.Annotations, "server", "middleware"); ok {
|
||||
for _, item := range strings.Split(value, ",") {
|
||||
middleware := g.GetAnnotation("middleware")
|
||||
if len(middleware) > 0 {
|
||||
for _, item := range strings.Split(middleware, ",") {
|
||||
result.Add(strings.TrimSpace(item))
|
||||
}
|
||||
}
|
||||
@@ -118,3 +121,70 @@ func formatCode(code string) string {
|
||||
|
||||
return string(ret)
|
||||
}
|
||||
|
||||
func responseGoTypeName(r spec.Route, pkg ...string) string {
|
||||
if r.ResponseType == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
return golangExpr(r.ResponseType, pkg...)
|
||||
}
|
||||
|
||||
func requestGoTypeName(r spec.Route, pkg ...string) string {
|
||||
if r.RequestType == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
return golangExpr(r.RequestType, pkg...)
|
||||
}
|
||||
|
||||
func golangExpr(ty spec.Type, pkg ...string) string {
|
||||
switch v := ty.(type) {
|
||||
case spec.PrimitiveType:
|
||||
return v.RawName
|
||||
case spec.DefineStruct:
|
||||
if len(pkg) > 1 {
|
||||
panic("package cannot be more than 1")
|
||||
}
|
||||
|
||||
if len(pkg) == 0 {
|
||||
return v.RawName
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s.%s", pkg[0], strings.Title(v.RawName))
|
||||
case spec.ArrayType:
|
||||
if len(pkg) > 1 {
|
||||
panic("package cannot be more than 1")
|
||||
}
|
||||
|
||||
if len(pkg) == 0 {
|
||||
return v.RawName
|
||||
}
|
||||
|
||||
return fmt.Sprintf("[]%s", golangExpr(v.Value, pkg...))
|
||||
case spec.MapType:
|
||||
if len(pkg) > 1 {
|
||||
panic("package cannot be more than 1")
|
||||
}
|
||||
|
||||
if len(pkg) == 0 {
|
||||
return v.RawName
|
||||
}
|
||||
|
||||
return fmt.Sprintf("map[%s]%s", v.Key, golangExpr(v.Value, pkg...))
|
||||
case spec.PointerType:
|
||||
if len(pkg) > 1 {
|
||||
panic("package cannot be more than 1")
|
||||
}
|
||||
|
||||
if len(pkg) == 0 {
|
||||
return v.RawName
|
||||
}
|
||||
|
||||
return fmt.Sprintf("*%s", golangExpr(v.Type, pkg...))
|
||||
case spec.InterfaceType:
|
||||
return v.RawName
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user