go-serviceman/vendor/github.com/UnnoTed/fileb0x/template/funcs.go

131 lines
2.2 KiB
Go
Raw Normal View History

2019-07-01 08:44:54 +00:00
package template
import (
"regexp"
"strconv"
"strings"
"text/template"
"github.com/UnnoTed/fileb0x/config"
)
var safeNameBlacklist = map[string]string{}
var blacklist = map[string]int{}
// taken from golint @ https://github.com/golang/lint/blob/master/lint.go#L702
var commonInitialisms = map[string]bool{
"API": true,
"ASCII": true,
"CPU": true,
"CSS": true,
"DNS": true,
"EOF": true,
"GUID": true,
"HTML": true,
"HTTP": true,
"HTTPS": true,
"ID": true,
"IP": true,
"JSON": true,
"LHS": true,
"QPS": true,
"RAM": true,
"RHS": true,
"RPC": true,
"SLA": true,
"SMTP": true,
"SQL": true,
"SSH": true,
"TCP": true,
"TLS": true,
"TTL": true,
"UDP": true,
"UI": true,
"UID": true,
"UUID": true,
"URI": true,
"URL": true,
"UTF8": true,
"VM": true,
"XML": true,
"XSRF": true,
"XSS": true,
}
var r = regexp.MustCompile(`[^a-zA-Z0-9]`)
var funcsTemplate = template.FuncMap{
"exported": exported,
"buildTags": buildTags,
"exportedTitle": exportedTitle,
"buildSafeVarName": buildSafeVarName,
}
var unexported bool
// SetUnexported variables, functions and types
func SetUnexported(e bool) {
unexported = e
}
func exported(field string) string {
if !unexported {
return strings.ToUpper(field)
}
return strings.ToLower(field)
}
func exportedTitle(field string) string {
if !unexported {
return strings.Title(field)
}
return strings.ToLower(field[0:1]) + field[1:]
}
func buildSafeVarName(path string) string {
name, exists := safeNameBlacklist[path]
if exists {
return name
}
n := config.SafeVarName.ReplaceAllString(path, "$")
words := strings.Split(n, "$")
name = ""
// check for uppercase words
for _, word := range words {
upper := strings.ToUpper(word)
if commonInitialisms[upper] {
name += upper
} else {
name += strings.Title(word)
}
}
// avoid redeclaring variables
//
// _file.txt
// file.txt
_, blacklisted := blacklist[name]
if blacklisted {
blacklist[name]++
name += strconv.Itoa(blacklist[name])
}
safeNameBlacklist[path] = name
blacklist[name]++
return name
}
func buildTags(tags string) string {
if tags != "" {
tags = "// +build " + tags + "\n"
}
return tags
}