syntax_def_tree.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package hhc_ast
  2. import "git.swzry.com/zry/go-hhc-cli/hhc_common"
  3. type SyntaxDefTreeNode interface {
  4. IsEnd() bool
  5. WalkNext(ctx *SDTWalkContext, token string) (SyntaxDefTreeNode, hhc_common.SDTWalkError)
  6. GetHelps(prefix string) []hhc_common.SDTHelpInfo
  7. Fallback(ctx *SDTWalkContext) (SyntaxDefTreeNode, hhc_common.SDTWalkError)
  8. }
  9. type SyntaxDefinitionTreeRoot struct {
  10. //Commands map[string]*SDTNode_Command
  11. Commands *SDT_TrieContainer
  12. }
  13. func (n *SyntaxDefinitionTreeRoot) IsEnd() bool {
  14. return false
  15. }
  16. func (n *SyntaxDefinitionTreeRoot) GetHelps(prefix string) []hhc_common.SDTHelpInfo {
  17. hi := make([]hhc_common.SDTHelpInfo, 0)
  18. if n.Commands != nil {
  19. kl := n.Commands.PrefixGetList(prefix)
  20. for _, v := range kl {
  21. hi = append(hi, hhc_common.SDTHelpInfo{
  22. IsArg: false,
  23. Name: v.Name,
  24. Description: v.Description,
  25. })
  26. }
  27. }
  28. return hi
  29. }
  30. func (n *SyntaxDefinitionTreeRoot) WalkNext(ctx *SDTWalkContext, token string) (SyntaxDefTreeNode, hhc_common.SDTWalkError) {
  31. if n.Commands != nil {
  32. v, err := n.Commands.WalkUtil(token)
  33. if err != nil {
  34. return nil, err
  35. }
  36. if v != nil {
  37. ctx.ASTNodes = append(ctx.ASTNodes, ASTNode_Command{
  38. Name: v.Name,
  39. })
  40. return v, nil
  41. }
  42. }
  43. return nil, &hhc_common.SDTWalkError_UnrecognizedCommand{RelyToken: token}
  44. }
  45. func (n *SyntaxDefinitionTreeRoot) Fallback(ctx *SDTWalkContext) (SyntaxDefTreeNode, hhc_common.SDTWalkError) {
  46. return nil, hhc_common.SDTWalkError_RootNodeCannotFallback{}
  47. }
  48. func (n *SyntaxDefinitionTreeRoot) AddCommand(cmd *SDTNode_Command) *SyntaxDefinitionTreeRoot {
  49. if n.Commands == nil {
  50. n.Commands = NewSDT_TrieContainer()
  51. }
  52. n.Commands.Put(cmd)
  53. cmd.Parent = n
  54. return n
  55. }