aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/go-openapi/swag/util.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/go-openapi/swag/util.go')
-rw-r--r--vendor/github.com/go-openapi/swag/util.go42
1 files changed, 40 insertions, 2 deletions
diff --git a/vendor/github.com/go-openapi/swag/util.go b/vendor/github.com/go-openapi/swag/util.go
index 40751aab4..0efb41735 100644
--- a/vendor/github.com/go-openapi/swag/util.go
+++ b/vendor/github.com/go-openapi/swag/util.go
@@ -40,6 +40,7 @@ var commonInitialisms = map[string]bool{
"IP": true,
"JSON": true,
"LHS": true,
+ "OAI": true,
"QPS": true,
"RAM": true,
"RHS": true,
@@ -163,8 +164,8 @@ func split(str string) (words []string) {
// Split when uppercase is found (needed for Snake)
str = rex1.ReplaceAllString(str, " $1")
- // check if consecutive single char things make up an initialism
+ // check if consecutive single char things make up an initialism
for _, k := range initialisms {
str = strings.Replace(str, rex1.ReplaceAllString(k, " $1"), " "+k, -1)
}
@@ -189,10 +190,47 @@ func lower(str string) string {
return strings.ToLower(trim(str))
}
+// Camelize an uppercased word
+func Camelize(word string) (camelized string) {
+ for pos, ru := range word {
+ if pos > 0 {
+ camelized += string(unicode.ToLower(ru))
+ } else {
+ camelized += string(unicode.ToUpper(ru))
+ }
+ }
+ return
+}
+
// ToFileName lowercases and underscores a go type name
func ToFileName(name string) string {
var out []string
- for _, w := range split(name) {
+ cml := trim(name)
+
+ // Camelize any capital word preceding a reserved keyword ("initialism")
+ // thus, upper-cased words preceding a common initialism will get separated
+ // e.g: ELBHTTPLoadBalancer becomes elb_http_load_balancer
+ rexPrevious := regexp.MustCompile(`(?P<word>\p{Lu}{2,})(?:HTTP|OAI)`)
+ cml = rexPrevious.ReplaceAllStringFunc(cml, func(match string) (replaceInMatch string) {
+ for _, m := range rexPrevious.FindAllStringSubmatch(match, -1) { // [ match submatch ]
+ if m[1] != "" {
+ replaceInMatch = strings.Replace(m[0], m[1], Camelize(m[1]), -1)
+ }
+ }
+ return
+ })
+
+ // Pre-camelize reserved keywords ("initialisms") to avoid unnecessary hyphenization
+ for _, k := range initialisms {
+ cml = strings.Replace(cml, k, Camelize(k), -1)
+ }
+
+ // Camelize other capital words to avoid unnecessary hyphenization
+ rexCase := regexp.MustCompile(`(\p{Lu}{2,})`)
+ cml = rexCase.ReplaceAllStringFunc(cml, Camelize)
+
+ // Final split with hyphens
+ for _, w := range split(cml) {
out = append(out, lower(w))
}
return strings.Join(out, "_")