12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package ast
- import (
- "strings"
- "github.com/tal-tech/go-zero/tools/goctl/api/parser/g4/gen/api"
- )
- // KvExpr describes key-value for api
- type KvExpr struct {
- Key Expr
- Value Expr
- DocExpr []Expr
- CommentExpr Expr
- }
- // VisitKvLit implements from api.BaseApiParserVisitor
- func (v *ApiVisitor) VisitKvLit(ctx *api.KvLitContext) interface{} {
- var kvExpr KvExpr
- kvExpr.Key = v.newExprWithToken(ctx.GetKey())
- commentExpr := v.getComment(ctx)
- if ctx.GetValue() != nil {
- valueText := ctx.GetValue().GetText()
- valueExpr := v.newExprWithToken(ctx.GetValue())
- if strings.Contains(valueText, "//") {
- if commentExpr == nil {
- commentExpr = v.newExprWithToken(ctx.GetValue())
- commentExpr.SetText("")
- }
- index := strings.Index(valueText, "//")
- commentExpr.SetText(valueText[index:])
- valueExpr.SetText(strings.TrimSpace(valueText[:index]))
- } else if strings.Contains(valueText, "/*") {
- if commentExpr == nil {
- commentExpr = v.newExprWithToken(ctx.GetValue())
- commentExpr.SetText("")
- }
- index := strings.Index(valueText, "/*")
- commentExpr.SetText(valueText[index:])
- valueExpr.SetText(strings.TrimSpace(valueText[:index]))
- }
- kvExpr.Value = valueExpr
- }
- kvExpr.DocExpr = v.getDoc(ctx)
- kvExpr.CommentExpr = commentExpr
- return &kvExpr
- }
- // Format provides a formatter for api command, now nothing to do
- func (k *KvExpr) Format() error {
- // todo
- return nil
- }
- // Equal compares whether the element literals in two KvExpr are equal
- func (k *KvExpr) Equal(v interface{}) bool {
- if v == nil {
- return false
- }
- kv, ok := v.(*KvExpr)
- if !ok {
- return false
- }
- if !EqualDoc(k, kv) {
- return false
- }
- return k.Key.Equal(kv.Key) && k.Value.Equal(kv.Value)
- }
- // Doc returns the document of KvExpr, like // some text
- func (k *KvExpr) Doc() []Expr {
- return k.DocExpr
- }
- // Comment returns the comment of KvExpr, like // some text
- func (k *KvExpr) Comment() Expr {
- return k.CommentExpr
- }
|