kv.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package ast
  2. import (
  3. "strings"
  4. "github.com/tal-tech/go-zero/tools/goctl/api/parser/g4/gen/api"
  5. )
  6. type KvExpr struct {
  7. Key Expr
  8. Value Expr
  9. DocExpr []Expr
  10. CommentExpr Expr
  11. }
  12. func (v *ApiVisitor) VisitKvLit(ctx *api.KvLitContext) interface{} {
  13. var kvExpr KvExpr
  14. kvExpr.Key = v.newExprWithToken(ctx.GetKey())
  15. commentExpr := v.getComment(ctx)
  16. if ctx.GetValue() != nil {
  17. valueText := ctx.GetValue().GetText()
  18. valueExpr := v.newExprWithToken(ctx.GetValue())
  19. if strings.Contains(valueText, "//") {
  20. if commentExpr == nil {
  21. commentExpr = v.newExprWithToken(ctx.GetValue())
  22. commentExpr.SetText("")
  23. }
  24. index := strings.Index(valueText, "//")
  25. commentExpr.SetText(valueText[index:])
  26. valueExpr.SetText(strings.TrimSpace(valueText[:index]))
  27. } else if strings.Contains(valueText, "/*") {
  28. if commentExpr == nil {
  29. commentExpr = v.newExprWithToken(ctx.GetValue())
  30. commentExpr.SetText("")
  31. }
  32. index := strings.Index(valueText, "/*")
  33. commentExpr.SetText(valueText[index:])
  34. valueExpr.SetText(strings.TrimSpace(valueText[:index]))
  35. }
  36. kvExpr.Value = valueExpr
  37. }
  38. kvExpr.DocExpr = v.getDoc(ctx)
  39. kvExpr.CommentExpr = commentExpr
  40. return &kvExpr
  41. }
  42. func (k *KvExpr) Format() error {
  43. // todo
  44. return nil
  45. }
  46. func (k *KvExpr) Equal(v interface{}) bool {
  47. if v == nil {
  48. return false
  49. }
  50. kv, ok := v.(*KvExpr)
  51. if !ok {
  52. return false
  53. }
  54. if !EqualDoc(k, kv) {
  55. return false
  56. }
  57. return k.Key.Equal(kv.Key) && k.Value.Equal(kv.Value)
  58. }
  59. func (k *KvExpr) Doc() []Expr {
  60. return k.DocExpr
  61. }
  62. func (k *KvExpr) Comment() Expr {
  63. return k.CommentExpr
  64. }