1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package ast
- import (
- "git.i2edu.net/i2/go-zero/tools/goctl/api/parser/g4/gen/api"
- )
- // InfoExpr defines info syntax for api
- type InfoExpr struct {
- Info Expr
- Lp Expr
- Rp Expr
- Kvs []*KvExpr
- }
- // VisitInfoSpec implements from api.BaseApiParserVisitor
- func (v *ApiVisitor) VisitInfoSpec(ctx *api.InfoSpecContext) interface{} {
- var expr InfoExpr
- expr.Info = v.newExprWithToken(ctx.GetInfoToken())
- expr.Lp = v.newExprWithToken(ctx.GetLp())
- expr.Rp = v.newExprWithToken(ctx.GetRp())
- list := ctx.AllKvLit()
- for _, each := range list {
- kvExpr := each.Accept(v).(*KvExpr)
- expr.Kvs = append(expr.Kvs, kvExpr)
- }
- if v.infoFlag {
- v.panic(expr.Info, "duplicate declaration 'info'")
- }
- return &expr
- }
- // Format provides a formatter for api command, now nothing to do
- func (i *InfoExpr) Format() error {
- // todo
- return nil
- }
- // Equal compares whether the element literals in two InfoExpr are equal
- func (i *InfoExpr) Equal(v interface{}) bool {
- if v == nil {
- return false
- }
- info, ok := v.(*InfoExpr)
- if !ok {
- return false
- }
- if !i.Info.Equal(info.Info) {
- return false
- }
- var expected, actual []*KvExpr
- expected = append(expected, i.Kvs...)
- actual = append(actual, info.Kvs...)
- if len(expected) != len(actual) {
- return false
- }
- for index, each := range expected {
- ac := actual[index]
- if !each.Equal(ac) {
- return false
- }
- }
- return true
- }
|