123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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
- }
|