diff --git a/tools/goctl/pkg/parser/api/parser/parser.go b/tools/goctl/pkg/parser/api/parser/parser.go index 2fe60ca66..2328f414b 100644 --- a/tools/goctl/pkg/parser/api/parser/parser.go +++ b/tools/goctl/pkg/parser/api/parser/parser.go @@ -1247,6 +1247,34 @@ func (p *Parser) parseAtServerKVExpression() *ast.KVExpr { } } + valueTok.Type = token.PATH + node := ast.NewTokenNode(valueTok) + node.SetLeadingCommentGroup(leadingCommentGroup) + expr.Value = node + return expr + } else if p.peekTokenIs(token.SUB) { + for { + if p.peekTokenIs(token.SUB) { + if !p.nextToken() { + return nil + } + + subTok := p.curTok + if !p.advanceIfPeekTokenIs(token.IDENT) { + return nil + } + + idTok := p.curTok + valueTok = token.Token{ + Text: valueTok.Text + subTok.Text + idTok.Text, + Position: valueTok.Position, + } + leadingCommentGroup = p.curTokenNode().LeadingCommentGroup + } else { + break + } + } + valueTok.Type = token.PATH node := ast.NewTokenNode(valueTok) node.SetLeadingCommentGroup(leadingCommentGroup) diff --git a/tools/goctl/pkg/parser/api/parser/parser_test.go b/tools/goctl/pkg/parser/api/parser/parser_test.go index e49eb2c6a..7e4b6524f 100644 --- a/tools/goctl/pkg/parser/api/parser/parser_test.go +++ b/tools/goctl/pkg/parser/api/parser/parser_test.go @@ -303,6 +303,7 @@ func TestParser_Parse_atServerStmt(t *testing.T) { "prefix1:": "/v1/v2_test/v2-beta", "prefix2:": "v1/v2_test/v2-beta", "prefix3:": "v1/v2_", + "prefix4:": "a-b-c", "summary:": `"test"`, } diff --git a/tools/goctl/pkg/parser/api/parser/testdata/atserver_test.api b/tools/goctl/pkg/parser/api/parser/testdata/atserver_test.api index 14b2b4a98..5980510e9 100644 --- a/tools/goctl/pkg/parser/api/parser/testdata/atserver_test.api +++ b/tools/goctl/pkg/parser/api/parser/testdata/atserver_test.api @@ -17,5 +17,6 @@ prefix1: /v1/v2_test/v2-beta prefix2: v1/v2_test/v2-beta prefix3: v1/v2_ + prefix4: a-b-c summary:"test" ) diff --git a/tools/goctl/pkg/parser/api/parser/testdata/example.api b/tools/goctl/pkg/parser/api/parser/testdata/example.api index 85cb5173b..078ef04c8 100644 --- a/tools/goctl/pkg/parser/api/parser/testdata/example.api +++ b/tools/goctl/pkg/parser/api/parser/testdata/example.api @@ -180,12 +180,14 @@ service example { post /example/array/base (DemoOfArrayReq) returns ([]string) } +@server ( + group: /prefix + prefix: foo-bar + summary: "test" +) service example { - @handler nestDemo1 - post /example/nest (NestDemoReq1) returns (NestDemoResp1) - - @handler nestDemo2 - post /example/nest2 (NestDemoReq2) returns (NestDemoResp2) + @handler prefixDemo + post /example/prefix (PostFormReq) returns (PostFormResp) } @server (