Support for referencing types in different API files using format (#1630)

This commit is contained in:
chensy
2022-03-12 15:17:31 +08:00
committed by GitHub
parent 209ffb934b
commit c55694d957
6 changed files with 56 additions and 19 deletions

View File

@@ -28,10 +28,11 @@ const (
// GoFormatApi format api file
func GoFormatApi(c *cli.Context) error {
useStdin := c.Bool("stdin")
skipCheckDeclare := c.Bool("declare")
var be errorx.BatchError
if useStdin {
if err := apiFormatByStdin(); err != nil {
if err := apiFormatByStdin(skipCheckDeclare); err != nil {
be.Add(err)
}
} else {
@@ -47,7 +48,7 @@ func GoFormatApi(c *cli.Context) error {
err = filepath.Walk(dir, func(path string, fi os.FileInfo, errBack error) (err error) {
if strings.HasSuffix(path, ".api") {
if err := ApiFormatByPath(path); err != nil {
if err := ApiFormatByPath(path, skipCheckDeclare); err != nil {
be.Add(util.WrapErr(err, fi.Name()))
}
}
@@ -64,13 +65,13 @@ func GoFormatApi(c *cli.Context) error {
return be.Err()
}
func apiFormatByStdin() error {
func apiFormatByStdin(skipCheckDeclare bool) error {
data, err := ioutil.ReadAll(os.Stdin)
if err != nil {
return err
}
result, err := apiFormat(string(data))
result, err := apiFormat(string(data), skipCheckDeclare)
if err != nil {
return err
}
@@ -80,7 +81,7 @@ func apiFormatByStdin() error {
}
// ApiFormatByPath format api from file path
func ApiFormatByPath(apiFilePath string) error {
func ApiFormatByPath(apiFilePath string, skipCheckDeclare bool) error {
data, err := ioutil.ReadFile(apiFilePath)
if err != nil {
return err
@@ -91,12 +92,12 @@ func ApiFormatByPath(apiFilePath string) error {
return err
}
result, err := apiFormat(string(data), abs)
result, err := apiFormat(string(data), skipCheckDeclare, abs)
if err != nil {
return err
}
_, err = parser.ParseContent(result, abs)
_, err = parser.ParseContentWithParserSkipCheckTypeDeclaration(result, abs)
if err != nil {
return err
}
@@ -104,8 +105,13 @@ func ApiFormatByPath(apiFilePath string) error {
return ioutil.WriteFile(apiFilePath, []byte(result), os.ModePerm)
}
func apiFormat(data string, filename ...string) (string, error) {
_, err := parser.ParseContent(data, filename...)
func apiFormat(data string, skipCheckDeclare bool, filename ...string) (string, error) {
var err error
if skipCheckDeclare {
_, err = parser.ParseContentWithParserSkipCheckTypeDeclaration(data, filename...)
} else {
_, err = parser.ParseContent(data, filename...)
}
if err != nil {
return "", err
}

View File

@@ -13,6 +13,7 @@ type Request struct {
}
type Response struct {
Message string ` + "`" + `json:"message"` + "`" + `
Students []Student ` + "`" + `json:"students"` + "`" + `
}
service A-api {
@server(
@@ -26,7 +27,8 @@ handler: GreetHandler
Name string ` + "`" + `path:"name,options=you|me"` + "`" + `
}
type Response {
Message string ` + "`" + `json:"message"` + "`" + `
Message string ` + "`" + `json:"message"` + "`" + `
Students []Student ` + "`" + `json:"students"` + "`" + `
}
service A-api {
@server(
@@ -37,7 +39,9 @@ service A-api {
)
func TestFormat(t *testing.T) {
r, err := apiFormat(notFormattedStr)
r, err := apiFormat(notFormattedStr, true)
assert.Nil(t, err)
assert.Equal(t, formattedStr, r)
_, err = apiFormat(notFormattedStr, false)
assert.Errorf(t, err, " line 7:13 can not found declaration 'Student' in context")
}