mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
83 lines
1.6 KiB
Go
83 lines
1.6 KiB
Go
package utils
|
|
|
|
import (
|
|
"reflect"
|
|
"regexp"
|
|
"strconv"
|
|
"unicode"
|
|
"unicode/utf8"
|
|
|
|
"github.com/wtfutil/wtf/cfg"
|
|
)
|
|
|
|
/* -------------------- Exported Functions -------------------- */
|
|
|
|
func HelpFromInterface(item interface{}) string {
|
|
result := ""
|
|
t := reflect.TypeOf(item)
|
|
|
|
for i := 0; i < t.NumField(); i++ {
|
|
field := t.Field(i)
|
|
|
|
kind := field.Type.Kind()
|
|
if field.Type.Kind() == reflect.Ptr {
|
|
kind = field.Type.Elem().Kind()
|
|
}
|
|
|
|
if field.Name == "common" {
|
|
result += HelpFromInterface(cfg.Common{})
|
|
}
|
|
|
|
switch kind {
|
|
case reflect.Interface:
|
|
result += HelpFromInterface(field.Type.Elem())
|
|
default:
|
|
result += helpFromValue(field)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// StripColorTags removes tcell color tags from a given string
|
|
func StripColorTags(input string) string {
|
|
openColorRegex := regexp.MustCompile(`\[.*?\]`)
|
|
return openColorRegex.ReplaceAllString(input, "")
|
|
}
|
|
|
|
/* -------------------- Unexported Functions -------------------- */
|
|
|
|
func helpFromValue(field reflect.StructField) string {
|
|
result := ""
|
|
|
|
optional, err := strconv.ParseBool(field.Tag.Get("optional"))
|
|
if err != nil {
|
|
optional = false
|
|
}
|
|
|
|
help := field.Tag.Get("help")
|
|
if optional {
|
|
help = "Optional " + help
|
|
}
|
|
|
|
values := field.Tag.Get("values")
|
|
if help != "" {
|
|
result += "\n\n " + lowercaseTitle(field.Name)
|
|
result += "\n " + help
|
|
|
|
if values != "" {
|
|
result += "\n Values: " + values
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func lowercaseTitle(title string) string {
|
|
if title == "" {
|
|
return ""
|
|
}
|
|
r, n := utf8.DecodeRuneInString(title)
|
|
return string(unicode.ToLower(r)) + title[n:]
|
|
}
|