package hhc_ast import "git.swzry.com/zry/go-hhc-cli/hhc_common" type SyntaxDefTreeNode interface { IsEnd() bool WalkNext(ctx *SDTWalkContext, token string) (SyntaxDefTreeNode, hhc_common.SDTWalkError) GetHelps(prefix string) []hhc_common.SDTHelpInfo Fallback(ctx *SDTWalkContext) (SyntaxDefTreeNode, hhc_common.SDTWalkError) } type SyntaxDefinitionTreeRoot struct { //Commands map[string]*SDTNode_Command Commands *SDT_TrieContainer } func (n *SyntaxDefinitionTreeRoot) IsEnd() bool { return false } func (n *SyntaxDefinitionTreeRoot) GetHelps(prefix string) []hhc_common.SDTHelpInfo { hi := make([]hhc_common.SDTHelpInfo, 0) if n.Commands != nil { kl := n.Commands.PrefixGetList(prefix) for _, v := range kl { hi = append(hi, hhc_common.SDTHelpInfo{ IsArg: false, Name: v.Name, Description: v.Description, }) } } return hi } func (n *SyntaxDefinitionTreeRoot) WalkNext(ctx *SDTWalkContext, token string) (SyntaxDefTreeNode, hhc_common.SDTWalkError) { if n.Commands != nil { v, err := n.Commands.WalkUtil(token) if err != nil { return nil, err } if v != nil { ctx.ASTNodes = append(ctx.ASTNodes, ASTNode_Command{ Name: v.Name, }) return v, nil } } return nil, &hhc_common.SDTWalkError_UnrecognizedCommand{RelyToken: token} } func (n *SyntaxDefinitionTreeRoot) Fallback(ctx *SDTWalkContext) (SyntaxDefTreeNode, hhc_common.SDTWalkError) { return nil, hhc_common.SDTWalkError_RootNodeCannotFallback{} } func (n *SyntaxDefinitionTreeRoot) AddCommand(cmd *SDTNode_Command) *SyntaxDefinitionTreeRoot { if n.Commands == nil { n.Commands = NewSDT_TrieContainer() } n.Commands.Put(cmd) cmd.Parent = n return n }