123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577 |
- package ast
- import "github.com/zeromicro/go-zero/tools/goctl/pkg/parser/api/token"
- // AtServerStmt represents @server statement.
- type AtServerStmt struct {
- // AtServer is the @server token.
- AtServer *TokenNode
- // LParen is the left parenthesis token.
- LParen *TokenNode
- // Values is the key-value pairs.
- Values []*KVExpr
- // RParen is the right parenthesis token.
- RParen *TokenNode
- }
- func (a *AtServerStmt) HasHeadCommentGroup() bool {
- return a.AtServer.HasHeadCommentGroup()
- }
- func (a *AtServerStmt) HasLeadingCommentGroup() bool {
- return a.RParen.HasLeadingCommentGroup()
- }
- func (a *AtServerStmt) CommentGroup() (head, leading CommentGroup) {
- return a.AtServer.HeadCommentGroup, a.RParen.LeadingCommentGroup
- }
- func (a *AtServerStmt) Format(prefix ...string) string {
- if len(a.Values) == 0 {
- return ""
- }
- var textList []string
- for _, v := range a.Values {
- if v.Value.IsZeroString() {
- continue
- }
- textList = append(textList, v.Format())
- }
- if len(textList) == 0 {
- return ""
- }
- w := NewBufferWriter()
- atServerNode := transferTokenNode(a.AtServer, withTokenNodePrefix(prefix...), ignoreLeadingComment())
- w.Write(withNode(atServerNode, a.LParen), expectSameLine())
- w.NewLine()
- for _, v := range a.Values {
- node := transferTokenNode(v.Key, withTokenNodePrefix(peekOne(prefix)+Indent), ignoreLeadingComment())
- w.Write(withNode(node, v.Value), expectIndentInfix(), expectSameLine())
- w.NewLine()
- }
- w.Write(withNode(transferTokenNode(a.RParen, withTokenNodePrefix(prefix...))))
- return w.String()
- }
- func (a *AtServerStmt) End() token.Position {
- return a.RParen.End()
- }
- func (a *AtServerStmt) Pos() token.Position {
- return a.AtServer.Pos()
- }
- func (a *AtServerStmt) stmtNode() {}
- type AtDocStmt interface {
- Stmt
- atDocNode()
- }
- type AtDocLiteralStmt struct {
- AtDoc *TokenNode
- Value *TokenNode
- }
- func (a *AtDocLiteralStmt) HasHeadCommentGroup() bool {
- return a.AtDoc.HasHeadCommentGroup()
- }
- func (a *AtDocLiteralStmt) HasLeadingCommentGroup() bool {
- return a.Value.HasLeadingCommentGroup()
- }
- func (a *AtDocLiteralStmt) CommentGroup() (head, leading CommentGroup) {
- return a.AtDoc.HeadCommentGroup, a.Value.LeadingCommentGroup
- }
- func (a *AtDocLiteralStmt) Format(prefix ...string) string {
- if a.Value.IsZeroString() {
- return ""
- }
- w := NewBufferWriter()
- atDocNode := transferTokenNode(a.AtDoc, withTokenNodePrefix(prefix...), ignoreLeadingComment())
- valueNode := transferTokenNode(a.Value, ignoreHeadComment())
- w.Write(withNode(atDocNode, valueNode), expectSameLine())
- return w.String()
- }
- func (a *AtDocLiteralStmt) End() token.Position {
- return a.Value.End()
- }
- func (a *AtDocLiteralStmt) atDocNode() {}
- func (a *AtDocLiteralStmt) Pos() token.Position {
- return a.AtDoc.Pos()
- }
- func (a *AtDocLiteralStmt) stmtNode() {}
- type AtDocGroupStmt struct {
- AtDoc *TokenNode
- LParen *TokenNode
- Values []*KVExpr
- RParen *TokenNode
- }
- func (a *AtDocGroupStmt) HasHeadCommentGroup() bool {
- return a.AtDoc.HasHeadCommentGroup()
- }
- func (a *AtDocGroupStmt) HasLeadingCommentGroup() bool {
- return a.RParen.HasLeadingCommentGroup()
- }
- func (a *AtDocGroupStmt) CommentGroup() (head, leading CommentGroup) {
- return a.AtDoc.HeadCommentGroup, a.RParen.LeadingCommentGroup
- }
- func (a *AtDocGroupStmt) Format(prefix ...string) string {
- if len(a.Values) == 0 {
- return ""
- }
- var textList []string
- for _, v := range a.Values {
- if v.Value.IsZeroString() {
- continue
- }
- textList = append(textList, v.Format(peekOne(prefix)+Indent))
- }
- if len(textList) == 0 {
- return ""
- }
- w := NewBufferWriter()
- atDocNode := transferTokenNode(a.AtDoc, withTokenNodePrefix(prefix...), ignoreLeadingComment())
- w.Write(withNode(atDocNode, a.LParen), expectSameLine())
- w.NewLine()
- for _, v := range a.Values {
- node := transferTokenNode(v.Key, withTokenNodePrefix(peekOne(prefix)+Indent), ignoreLeadingComment())
- w.Write(withNode(node, v.Value), expectIndentInfix(), expectSameLine())
- w.NewLine()
- }
- w.Write(withNode(transferTokenNode(a.RParen, withTokenNodePrefix(prefix...))))
- return w.String()
- }
- func (a *AtDocGroupStmt) End() token.Position {
- return a.RParen.End()
- }
- func (a *AtDocGroupStmt) atDocNode() {}
- func (a *AtDocGroupStmt) Pos() token.Position {
- return a.AtDoc.Pos()
- }
- func (a *AtDocGroupStmt) stmtNode() {}
- type ServiceStmt struct {
- AtServerStmt *AtServerStmt
- Service *TokenNode
- Name *ServiceNameExpr
- LBrace *TokenNode
- Routes []*ServiceItemStmt
- RBrace *TokenNode
- }
- func (s *ServiceStmt) HasHeadCommentGroup() bool {
- if s.AtServerStmt != nil {
- return s.AtServerStmt.HasHeadCommentGroup()
- }
- return s.Service.HasHeadCommentGroup()
- }
- func (s *ServiceStmt) HasLeadingCommentGroup() bool {
- return s.RBrace.HasLeadingCommentGroup()
- }
- func (s *ServiceStmt) CommentGroup() (head, leading CommentGroup) {
- if s.AtServerStmt != nil {
- head, _ = s.AtServerStmt.CommentGroup()
- return head, s.RBrace.LeadingCommentGroup
- }
- return s.Service.HeadCommentGroup, s.RBrace.LeadingCommentGroup
- }
- func (s *ServiceStmt) Format(prefix ...string) string {
- w := NewBufferWriter()
- if s.AtServerStmt != nil {
- text := s.AtServerStmt.Format()
- if len(text) > 0 {
- w.WriteText(text)
- w.NewLine()
- }
- }
- serviceNode := transferTokenNode(s.Service, withTokenNodePrefix(prefix...))
- w.Write(withNode(serviceNode, s.Name, s.LBrace), expectSameLine())
- if len(s.Routes) == 0 {
- w.Write(withNode(transferTokenNode(s.RBrace, withTokenNodePrefix(prefix...))))
- return w.String()
- }
- w.NewLine()
- for idx, route := range s.Routes {
- routeNode := transfer2TokenNode(route, false, withTokenNodePrefix(peekOne(prefix)+Indent))
- w.Write(withNode(routeNode))
- if idx < len(s.Routes)-1 {
- w.NewLine()
- }
- }
- w.Write(withNode(transferTokenNode(s.RBrace, withTokenNodePrefix(prefix...))))
- return w.String()
- }
- func (s *ServiceStmt) End() token.Position {
- return s.RBrace.End()
- }
- func (s *ServiceStmt) Pos() token.Position {
- if s.AtServerStmt != nil {
- return s.AtServerStmt.Pos()
- }
- return s.Service.Pos()
- }
- func (s *ServiceStmt) stmtNode() {}
- type ServiceNameExpr struct {
- Name *TokenNode
- }
- func (s *ServiceNameExpr) HasHeadCommentGroup() bool {
- return s.Name.HasHeadCommentGroup()
- }
- func (s *ServiceNameExpr) HasLeadingCommentGroup() bool {
- return s.Name.HasLeadingCommentGroup()
- }
- func (s *ServiceNameExpr) CommentGroup() (head, leading CommentGroup) {
- return s.Name.HeadCommentGroup, s.Name.LeadingCommentGroup
- }
- func (s *ServiceNameExpr) Format(...string) string {
- w := NewBufferWriter()
- w.WriteText(s.Name.Format())
- return w.String()
- }
- func (s *ServiceNameExpr) End() token.Position {
- return s.Name.End()
- }
- func (s *ServiceNameExpr) Pos() token.Position {
- return s.Name.Pos()
- }
- func (s *ServiceNameExpr) exprNode() {}
- type AtHandlerStmt struct {
- AtHandler *TokenNode
- Name *TokenNode
- }
- func (a *AtHandlerStmt) HasHeadCommentGroup() bool {
- return a.AtHandler.HasHeadCommentGroup()
- }
- func (a *AtHandlerStmt) HasLeadingCommentGroup() bool {
- return a.Name.HasLeadingCommentGroup()
- }
- func (a *AtHandlerStmt) CommentGroup() (head, leading CommentGroup) {
- return a.AtHandler.HeadCommentGroup, a.Name.LeadingCommentGroup
- }
- func (a *AtHandlerStmt) Format(prefix ...string) string {
- w := NewBufferWriter()
- atDocNode := transferTokenNode(a.AtHandler, withTokenNodePrefix(prefix...), ignoreLeadingComment())
- nameNode := transferTokenNode(a.Name, ignoreHeadComment())
- w.Write(withNode(atDocNode, nameNode), expectSameLine())
- return w.String()
- }
- func (a *AtHandlerStmt) End() token.Position {
- return a.Name.End()
- }
- func (a *AtHandlerStmt) Pos() token.Position {
- return a.AtHandler.Pos()
- }
- func (a *AtHandlerStmt) stmtNode() {}
- type ServiceItemStmt struct {
- AtDoc AtDocStmt
- AtHandler *AtHandlerStmt
- Route *RouteStmt
- }
- func (s *ServiceItemStmt) HasHeadCommentGroup() bool {
- if s.AtDoc != nil {
- return s.AtDoc.HasHeadCommentGroup()
- }
- return s.AtHandler.HasHeadCommentGroup()
- }
- func (s *ServiceItemStmt) HasLeadingCommentGroup() bool {
- return s.Route.HasLeadingCommentGroup()
- }
- func (s *ServiceItemStmt) CommentGroup() (head, leading CommentGroup) {
- _, leading = s.Route.CommentGroup()
- if s.AtDoc != nil {
- head, _ = s.AtDoc.CommentGroup()
- return head, leading
- }
- head, _ = s.AtHandler.CommentGroup()
- return head, leading
- }
- func (s *ServiceItemStmt) Format(prefix ...string) string {
- w := NewBufferWriter()
- if s.AtDoc != nil {
- w.WriteText(s.AtDoc.Format(prefix...))
- w.NewLine()
- }
- w.WriteText(s.AtHandler.Format(prefix...))
- w.NewLine()
- routeNode := transfer2TokenNode(s.Route, false, withTokenNodePrefix(prefix...))
- w.Write(withNode(routeNode))
- w.NewLine()
- return w.String()
- }
- func (s *ServiceItemStmt) End() token.Position {
- return s.Route.End()
- }
- func (s *ServiceItemStmt) Pos() token.Position {
- if s.AtDoc != nil {
- return s.AtDoc.Pos()
- }
- return s.AtHandler.Pos()
- }
- func (s *ServiceItemStmt) stmtNode() {}
- type RouteStmt struct {
- Method *TokenNode
- Path *PathExpr
- Request *BodyStmt
- Returns *TokenNode
- Response *BodyStmt
- }
- func (r *RouteStmt) HasHeadCommentGroup() bool {
- return r.Method.HasHeadCommentGroup()
- }
- func (r *RouteStmt) HasLeadingCommentGroup() bool {
- if r.Response != nil {
- return r.Response.HasLeadingCommentGroup()
- } else if r.Returns != nil {
- return r.Returns.HasLeadingCommentGroup()
- } else if r.Request != nil {
- return r.Request.HasLeadingCommentGroup()
- }
- return r.Path.HasLeadingCommentGroup()
- }
- func (r *RouteStmt) CommentGroup() (head, leading CommentGroup) {
- head, _ = r.Method.CommentGroup()
- if r.Response != nil {
- _, leading = r.Response.CommentGroup()
- } else if r.Returns != nil {
- _, leading = r.Returns.CommentGroup()
- } else if r.Request != nil {
- _, leading = r.Request.CommentGroup()
- }
- return head, leading
- }
- func (r *RouteStmt) Format(prefix ...string) string {
- w := NewBufferWriter()
- methodNode := transferTokenNode(r.Method, withTokenNodePrefix(prefix...), ignoreLeadingComment())
- if r.Response != nil {
- if r.Response.Body == nil {
- r.Response.RParen = transferTokenNode(r.Response.RParen, ignoreHeadComment())
- if r.Request != nil {
- w.Write(withNode(methodNode, r.Path, r.Request), expectSameLine())
- } else {
- w.Write(withNode(methodNode, r.Path), expectSameLine())
- }
- } else {
- r.Response.RParen = transferTokenNode(r.Response.RParen, ignoreHeadComment())
- if r.Request != nil {
- w.Write(withNode(methodNode, r.Path, r.Request, r.Returns, r.Response), expectSameLine())
- } else {
- w.Write(withNode(methodNode, r.Path, r.Returns, r.Response), expectSameLine())
- }
- }
- } else if r.Request != nil {
- r.Request.RParen = transferTokenNode(r.Request.RParen, ignoreHeadComment())
- w.Write(withNode(methodNode, r.Path, r.Request), expectSameLine())
- } else {
- pathNode := transferTokenNode(r.Path.Value, ignoreHeadComment())
- w.Write(withNode(methodNode, pathNode), expectSameLine())
- }
- return w.String()
- }
- func (r *RouteStmt) End() token.Position {
- if r.Response != nil {
- return r.Response.End()
- }
- if r.Returns != nil {
- return r.Returns.Pos()
- }
- if r.Request != nil {
- return r.Request.End()
- }
- return r.Path.End()
- }
- func (r *RouteStmt) Pos() token.Position {
- return r.Method.Pos()
- }
- func (r *RouteStmt) stmtNode() {}
- type PathExpr struct {
- Value *TokenNode
- }
- func (p *PathExpr) HasHeadCommentGroup() bool {
- return p.Value.HasHeadCommentGroup()
- }
- func (p *PathExpr) HasLeadingCommentGroup() bool {
- return p.Value.HasLeadingCommentGroup()
- }
- func (p *PathExpr) CommentGroup() (head, leading CommentGroup) {
- return p.Value.CommentGroup()
- }
- func (p *PathExpr) Format(prefix ...string) string {
- pathNode := transferTokenNode(p.Value, ignoreComment())
- return pathNode.Format(prefix...)
- }
- func (p *PathExpr) End() token.Position {
- return p.Value.End()
- }
- func (p *PathExpr) Pos() token.Position {
- return p.Value.Pos()
- }
- func (p *PathExpr) exprNode() {}
- type BodyStmt struct {
- LParen *TokenNode
- Body *BodyExpr
- RParen *TokenNode
- }
- func (b *BodyStmt) HasHeadCommentGroup() bool {
- return b.LParen.HasHeadCommentGroup()
- }
- func (b *BodyStmt) HasLeadingCommentGroup() bool {
- return b.RParen.HasLeadingCommentGroup()
- }
- func (b *BodyStmt) CommentGroup() (head, leading CommentGroup) {
- return b.LParen.HeadCommentGroup, b.RParen.LeadingCommentGroup
- }
- func (b *BodyStmt) Format(...string) string {
- w := NewBufferWriter()
- if b.Body == nil {
- return ""
- }
- w.Write(withNode(b.LParen, b.Body, b.RParen), withInfix(NilIndent), expectSameLine())
- return w.String()
- }
- func (b *BodyStmt) End() token.Position {
- return b.RParen.End()
- }
- func (b *BodyStmt) Pos() token.Position {
- return b.LParen.Pos()
- }
- func (b *BodyStmt) stmtNode() {}
- type BodyExpr struct {
- LBrack *TokenNode
- RBrack *TokenNode
- Star *TokenNode
- Value *TokenNode
- }
- func (e *BodyExpr) HasHeadCommentGroup() bool {
- if e.LBrack != nil {
- return e.LBrack.HasHeadCommentGroup()
- } else if e.Star != nil {
- return e.Star.HasHeadCommentGroup()
- } else {
- return e.Value.HasHeadCommentGroup()
- }
- }
- func (e *BodyExpr) HasLeadingCommentGroup() bool {
- return e.Value.HasLeadingCommentGroup()
- }
- func (e *BodyExpr) CommentGroup() (head, leading CommentGroup) {
- if e.LBrack != nil {
- head = e.LBrack.HeadCommentGroup
- } else if e.Star != nil {
- head = e.Star.HeadCommentGroup
- } else {
- head = e.Value.HeadCommentGroup
- }
- return head, e.Value.LeadingCommentGroup
- }
- func (e *BodyExpr) End() token.Position {
- return e.Value.End()
- }
- func (e *BodyExpr) Format(...string) string {
- w := NewBufferWriter()
- if e.LBrack != nil {
- lbrackNode := transferTokenNode(e.LBrack, ignoreComment())
- rbrackNode := transferTokenNode(e.RBrack, ignoreComment())
- if e.Star != nil {
- starNode := transferTokenNode(e.Star, ignoreComment())
- w.Write(withNode(lbrackNode, rbrackNode, starNode, e.Value), withInfix(NilIndent), expectSameLine())
- } else {
- w.Write(withNode(lbrackNode, rbrackNode, e.Value), withInfix(NilIndent), expectSameLine())
- }
- } else if e.Star != nil {
- starNode := transferTokenNode(e.Star, ignoreComment())
- w.Write(withNode(starNode, e.Value), withInfix(NilIndent), expectSameLine())
- } else {
- w.Write(withNode(e.Value))
- }
- return w.String()
- }
- func (e *BodyExpr) Pos() token.Position {
- if e.LBrack != nil {
- return e.LBrack.Pos()
- }
- if e.Star != nil {
- return e.Star.Pos()
- }
- return e.Value.Pos()
- }
- func (e *BodyExpr) exprNode() {}
|