From ace11449468ebd41b84d5a41811db240c5d35eda Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Thu, 23 Jan 2020 01:35:53 +0300 Subject: add help --- pkg/server/cmds.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'pkg/server/cmds.go') diff --git a/pkg/server/cmds.go b/pkg/server/cmds.go index f148991..e383dac 100644 --- a/pkg/server/cmds.go +++ b/pkg/server/cmds.go @@ -2,6 +2,7 @@ package server import ( "strings" + "sort" "log" ) @@ -17,6 +18,10 @@ type node struct { var cmds = newNode() +func init() { + newCmd(help, "help") +} + func newNode() *node { return &node{m: map[string]*node{}} } @@ -61,3 +66,52 @@ func getCmd(path []string) (*cmd, []string) { return nil, nil } + +func help(r *request) { + var ss []string + + var walker func ([]string, *node) + + walker = func (path []string, node *node) { + if node.c != nil { + ss = append(ss, strings.Join(path, " ")) + return + } + + n := len(path) + path = append(path, "") + + for k, v := range node.m { + path[n] = k + walker(path, v) + } + } + + root := cmds + + for _, s := range r.args { + root = root.m[s] + + if root == nil { + break + } + } + + if root == nil { + r.Print("nothing to help") + return + } + + if root.c != nil { + r.Print("usage: ", root.c.name, " [...]") + return + } + + walker(nil, root) + + sort.Strings(ss) + + for _, s := range ss { + r.Println(s) + } +} -- cgit v1.2.3-70-g09d2