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:
kingxt
2021-01-11 15:10:51 +08:00
committed by GitHub
parent b0ccfb8eb4
commit ee19fb736b
88 changed files with 13641 additions and 2458 deletions

View File

@@ -16,9 +16,9 @@ import (
const testApiTemplate = `
info(
title: doc title
desc: >
desc: ">
doc description first part,
doc description second part<
doc description second part<"
version: 1.0
)
@@ -55,9 +55,7 @@ service A-api {
const testMultiServiceTemplate = `
info(
title: doc title
desc: >
doc description first part,
doc description second part<
desc: doc description first part
version: 1.0
)
@@ -229,7 +227,7 @@ type Response struct {
}
service A-api {
@doc(helloworld)
@doc ("helloworld")
@server(
handler: GreetHandler
)
@@ -249,7 +247,7 @@ type Response struct {
}
service A-api {
@doc(helloworld)
@doc ("helloworld")
@server(
handler: GreetHandler
)
@@ -325,10 +323,7 @@ func TestParser(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
api, err := parser.Parse()
api, err := parser.Parse(filename)
assert.Nil(t, err)
assert.Equal(t, len(api.Types), 2)
@@ -337,8 +332,8 @@ func TestParser(t *testing.T) {
assert.Equal(t, api.Service.Routes()[0].Path, "/greet/from/:name")
assert.Equal(t, api.Service.Routes()[1].Path, "/greet/get")
assert.Equal(t, api.Service.Routes()[1].RequestType.Name, "Request")
assert.Equal(t, api.Service.Routes()[1].ResponseType.Name, "")
assert.Equal(t, api.Service.Routes()[1].RequestTypeName(), "Request")
assert.Equal(t, api.Service.Routes()[1].ResponseType, nil)
validate(t, filename)
}
@@ -349,10 +344,7 @@ func TestMultiService(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
api, err := parser.Parse()
api, err := parser.Parse(filename)
assert.Nil(t, err)
assert.Equal(t, len(api.Service.Routes()), 2)
@@ -367,10 +359,7 @@ func TestApiNoInfo(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
_, err = parser.Parse()
_, err = parser.Parse(filename)
assert.Nil(t, err)
validate(t, filename)
@@ -382,7 +371,7 @@ func TestInvalidApiFile(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
_, err = parser.NewParser(filename)
_, err = parser.Parse(filename)
assert.NotNil(t, err)
}
@@ -392,14 +381,11 @@ func TestAnonymousAnnotation(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
api, err := parser.Parse()
api, err := parser.Parse(filename)
assert.Nil(t, err)
assert.Equal(t, len(api.Service.Routes()), 1)
assert.Equal(t, api.Service.Routes()[0].Annotations[0].Value, "GreetHandler")
assert.Equal(t, api.Service.Routes()[0].Handler, "GreetHandler")
validate(t, filename)
}
@@ -410,10 +396,7 @@ func TestApiHasMiddleware(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
_, err = parser.Parse()
_, err = parser.Parse(filename)
assert.Nil(t, err)
validate(t, filename)
@@ -425,10 +408,7 @@ func TestApiHasJwt(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
_, err = parser.Parse()
_, err = parser.Parse(filename)
assert.Nil(t, err)
validate(t, filename)
@@ -440,10 +420,7 @@ func TestApiHasJwtAndMiddleware(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
_, err = parser.Parse()
_, err = parser.Parse(filename)
assert.Nil(t, err)
validate(t, filename)
@@ -455,13 +432,8 @@ func TestApiHasNoRequestBody(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
_, err = parser.Parse(filename)
assert.Nil(t, err)
_, err = parser.Parse()
assert.Nil(t, err)
validate(t, filename)
}
func TestApiRoutes(t *testing.T) {
@@ -470,10 +442,7 @@ func TestApiRoutes(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
_, err = parser.Parse()
_, err = parser.Parse(filename)
assert.Nil(t, err)
validate(t, filename)
@@ -485,10 +454,7 @@ func TestHasCommentRoutes(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
_, err = parser.Parse()
_, err = parser.Parse(filename)
assert.Nil(t, err)
validate(t, filename)
@@ -500,13 +466,8 @@ func TestInlineTypeNotExist(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
_, err = parser.Parse()
assert.Nil(t, err)
validate(t, filename)
_, err = parser.Parse(filename)
assert.NotNil(t, err)
}
func TestHasImportApi(t *testing.T) {
@@ -520,15 +481,12 @@ func TestHasImportApi(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(importApiName)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
api, err := parser.Parse()
api, err := parser.Parse(filename)
assert.Nil(t, err)
var hasInline bool
for _, ty := range api.Types {
if ty.Name == "ImportData" {
if ty.Name() == "ImportData" {
hasInline = true
break
}
@@ -544,10 +502,7 @@ func TestNoStructApi(t *testing.T) {
assert.Nil(t, err)
defer os.Remove(filename)
parser, err := parser.NewParser(filename)
assert.Nil(t, err)
spec, err := parser.Parse()
spec, err := parser.Parse(filename)
assert.Nil(t, err)
assert.Equal(t, len(spec.Types), 5)
@@ -559,8 +514,8 @@ func TestNestTypeApi(t *testing.T) {
err := ioutil.WriteFile(filename, []byte(nestTypeApi), os.ModePerm)
assert.Nil(t, err)
defer os.Remove(filename)
_, err = parser.NewParser(filename)
_, err = parser.Parse(filename)
assert.NotNil(t, err)
}
@@ -569,7 +524,8 @@ func TestCamelStyle(t *testing.T) {
err := ioutil.WriteFile(filename, []byte(testApiTemplate), os.ModePerm)
assert.Nil(t, err)
defer os.Remove(filename)
_, err = parser.NewParser(filename)
_, err = parser.Parse(filename)
assert.Nil(t, err)
validateWithCamel(t, filename, "GoZero")