1package cli 2 3// CommandCategories is a slice of *CommandCategory. 4type CommandCategories []*CommandCategory 5 6// CommandCategory is a category containing commands. 7type CommandCategory struct { 8 Name string 9 Commands Commands 10} 11 12func (c CommandCategories) Less(i, j int) bool { 13 return lexicographicLess(c[i].Name, c[j].Name) 14} 15 16func (c CommandCategories) Len() int { 17 return len(c) 18} 19 20func (c CommandCategories) Swap(i, j int) { 21 c[i], c[j] = c[j], c[i] 22} 23 24// AddCommand adds a command to a category. 25func (c CommandCategories) AddCommand(category string, command Command) CommandCategories { 26 for _, commandCategory := range c { 27 if commandCategory.Name == category { 28 commandCategory.Commands = append(commandCategory.Commands, command) 29 return c 30 } 31 } 32 return append(c, &CommandCategory{Name: category, Commands: []Command{command}}) 33} 34 35// VisibleCommands returns a slice of the Commands with Hidden=false 36func (c *CommandCategory) VisibleCommands() []Command { 37 ret := []Command{} 38 for _, command := range c.Commands { 39 if !command.Hidden { 40 ret = append(ret, command) 41 } 42 } 43 return ret 44} 45