mirror of https://github.com/zhufuyi/sponge
feat: unified naming style for variable names
This commit is contained in:
parent
3ff6e6efae
commit
42bb6b2132
|
@ -0,0 +1,119 @@
|
|||
package parser
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/huandu/xstrings"
|
||||
)
|
||||
|
||||
var peculiarNouns = map[string]string{
|
||||
"ID": "Id",
|
||||
"UID": "Uid",
|
||||
"UUID": "Uuid",
|
||||
"GUID": "Guid",
|
||||
"URI": "Uri",
|
||||
"URL": "Url",
|
||||
"IP": "Ip",
|
||||
"QPS": "Qps",
|
||||
"API": "Api",
|
||||
"ASCII": "Ascii",
|
||||
"CPU": "Cpu",
|
||||
"CSS": "Css",
|
||||
"DNS": "Dns",
|
||||
"EOF": "Eof",
|
||||
"HTML": "Html",
|
||||
"HTTP": "Http",
|
||||
"HTTPS": "Https",
|
||||
"JSON": "Json",
|
||||
"LHS": "Lhs",
|
||||
"RAM": "Ram",
|
||||
"RHS": "Rhs",
|
||||
"RPC": "Rpc",
|
||||
"SLA": "Sla",
|
||||
"SMTP": "Smtp",
|
||||
"SSH": "Ssh",
|
||||
"TLS": "Tls",
|
||||
"TTL": "Ttl",
|
||||
"UI": "Ui",
|
||||
"UTF8": "Utf8",
|
||||
"VM": "Vm",
|
||||
"XML": "Xml",
|
||||
"XSRF": "Xsrf",
|
||||
"XSS": "Xss",
|
||||
}
|
||||
|
||||
func toCamel(s string) string {
|
||||
str := xstrings.ToCamelCase(s)
|
||||
|
||||
name := strings.ToUpper(str)
|
||||
if _, ok := peculiarNouns[name]; ok {
|
||||
return name
|
||||
}
|
||||
|
||||
l := len(str)
|
||||
for k, v := range peculiarNouns {
|
||||
nl := len(v)
|
||||
if l > nl {
|
||||
if str[l-nl:] == v {
|
||||
str = str[:l-nl] + k
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if str == "_ID" { // special case for table column ID
|
||||
str = "ID"
|
||||
}
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
func firstLetterToLower(str string) string {
|
||||
if len(str) == 0 {
|
||||
return str
|
||||
}
|
||||
|
||||
if (str[0] >= 'A' && str[0] <= 'Z') || (str[0] >= 'a' && str[0] <= 'z') {
|
||||
return strings.ToLower(str[:1]) + str[1:]
|
||||
}
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
func customToCamel(str string) string {
|
||||
str = toCamel(str)
|
||||
|
||||
if _, ok := peculiarNouns[str]; ok {
|
||||
str = strings.ToLower(str)
|
||||
} else {
|
||||
str = firstLetterToLower(str)
|
||||
}
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
func customToSnake(str string) string {
|
||||
str = toCamel(str)
|
||||
l := len(str)
|
||||
for k, _ := range peculiarNouns {
|
||||
if str == k {
|
||||
str = strings.ToLower(str)
|
||||
break
|
||||
}
|
||||
|
||||
nl := len(k)
|
||||
if l > nl {
|
||||
if str[l-nl:] == k {
|
||||
str = str[:l-nl] + "_" + strings.ToLower(k)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
str = xstrings.ToSnakeCase(str)
|
||||
if strings.HasPrefix(str, "__") {
|
||||
str = str[1:]
|
||||
}
|
||||
|
||||
return str
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package parser
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNameFormat(t *testing.T) {
|
||||
names := [][]string{
|
||||
{"id_", "_id", "id", "iD", "ID", "Id", "order_id", "orderId", "orderID", "OrderID"},
|
||||
{"ip_", "_ip", "ip", "iP", "IP", "Ip", "host_ip", "hostIp", "hostIP", "HostIP"},
|
||||
{"url_", "_url", "url", "uRL", "URL", "Url", "blog_url", "blogUrl", "blogURL", "BlogURL"},
|
||||
{"_user_name", "user_name", "userName", "UserName"},
|
||||
{"_zh_中文", "zh_中文", "中文zh"},
|
||||
}
|
||||
|
||||
for _, ns := range names {
|
||||
var convertNames []string
|
||||
var convertNames2 []string
|
||||
var convertNames3 []string
|
||||
for _, name := range ns {
|
||||
convertNames = append(convertNames, toCamel(name))
|
||||
convertNames2 = append(convertNames2, customToCamel(name))
|
||||
convertNames3 = append(convertNames3, customToSnake(name))
|
||||
}
|
||||
t.Log("source: ", ns)
|
||||
t.Log("toCamel: ", convertNames)
|
||||
t.Log("customToCamel:", convertNames2)
|
||||
t.Log("customToSnake:", convertNames3)
|
||||
println()
|
||||
}
|
||||
}
|
|
@ -12,7 +12,6 @@ import (
|
|||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/huandu/xstrings"
|
||||
"github.com/jinzhu/inflection"
|
||||
"github.com/zhufuyi/sqlparser/ast"
|
||||
"github.com/zhufuyi/sqlparser/dependency/mysql"
|
||||
|
@ -1287,114 +1286,3 @@ func getDefaultValue(expr ast.ExprNode) (value string) {
|
|||
}
|
||||
return value
|
||||
}
|
||||
|
||||
var acronym = map[string]struct{}{
|
||||
"ID": {},
|
||||
"IP": {},
|
||||
}
|
||||
|
||||
// nolint
|
||||
func toCamel(s string) string {
|
||||
s = strings.TrimSpace(s)
|
||||
if s == "" {
|
||||
return s
|
||||
}
|
||||
s += "."
|
||||
|
||||
n := strings.Builder{}
|
||||
n.Grow(len(s))
|
||||
temp := strings.Builder{}
|
||||
temp.Grow(len(s))
|
||||
wordFirst := true
|
||||
for _, v := range []byte(s) {
|
||||
vIsCap := v >= 'A' && v <= 'Z'
|
||||
vIsLow := v >= 'a' && v <= 'z'
|
||||
if wordFirst && vIsLow {
|
||||
v -= 'a' - 'A'
|
||||
}
|
||||
|
||||
if vIsCap || vIsLow {
|
||||
temp.WriteByte(v)
|
||||
wordFirst = false
|
||||
} else {
|
||||
isNum := v >= '0' && v <= '9'
|
||||
wordFirst = isNum || v == '_' || v == ' ' || v == '-' || v == '.'
|
||||
if temp.Len() > 0 && wordFirst {
|
||||
word := temp.String()
|
||||
upper := strings.ToUpper(word)
|
||||
if _, ok := acronym[upper]; ok {
|
||||
n.WriteString(upper)
|
||||
} else {
|
||||
n.WriteString(word)
|
||||
}
|
||||
temp.Reset()
|
||||
}
|
||||
if isNum {
|
||||
n.WriteByte(v)
|
||||
}
|
||||
}
|
||||
}
|
||||
str := n.String()
|
||||
|
||||
if len(str) > 2 {
|
||||
if str[len(str)-2:] == "Id" {
|
||||
str = str[:len(str)-2] + "ID"
|
||||
} else if str[len(str)-2:] == "Ip" {
|
||||
str = str[:len(str)-2] + "IP"
|
||||
}
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
func firstLetterToLower(str string) string {
|
||||
if len(str) == 0 {
|
||||
return str
|
||||
}
|
||||
|
||||
if (str[0] >= 'A' && str[0] <= 'Z') || (str[0] >= 'a' && str[0] <= 'z') {
|
||||
return strings.ToLower(str[:1]) + str[1:]
|
||||
}
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
func customToCamel(str string) string {
|
||||
str = firstLetterToLower(toCamel(str))
|
||||
|
||||
if len(str) == 2 {
|
||||
if str == "iD" {
|
||||
str = "id"
|
||||
} else if str == "iP" {
|
||||
str = "ip"
|
||||
}
|
||||
}
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
func customToSnake(str string) string {
|
||||
if len(str) == 0 {
|
||||
return str
|
||||
}
|
||||
|
||||
index := 0
|
||||
for _, c := range str {
|
||||
if c != '_' {
|
||||
break
|
||||
}
|
||||
index++
|
||||
}
|
||||
if index != 0 {
|
||||
str = str[index:]
|
||||
}
|
||||
|
||||
if len(str) == 2 {
|
||||
if str == "iD" {
|
||||
str = "id"
|
||||
} else if str == "iP" {
|
||||
str = "ip"
|
||||
}
|
||||
}
|
||||
|
||||
return xstrings.ToSnakeCase(str)
|
||||
}
|
||||
|
|
|
@ -264,22 +264,6 @@ func TestParseSQLs(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestConvertNames(t *testing.T) {
|
||||
names := []string{"_id", "id", "iD", "user_id", "productId", "orderID", "user_name", "ip", "iP", "host_ip", "myIP"}
|
||||
var convertNames []string
|
||||
var convertNames2 []string
|
||||
var convertNames3 []string
|
||||
for _, name := range names {
|
||||
convertNames = append(convertNames, toCamel(name))
|
||||
convertNames2 = append(convertNames2, customToCamel(name))
|
||||
convertNames3 = append(convertNames3, customToSnake(name))
|
||||
}
|
||||
t.Log("source: ", names)
|
||||
t.Log("toCamel: ", convertNames)
|
||||
t.Log("customToCamel:", convertNames2)
|
||||
t.Log("customToSnake:", convertNames3)
|
||||
}
|
||||
|
||||
func Test_parseOption(t *testing.T) {
|
||||
opts := []Option{
|
||||
WithDBDriver("foo"),
|
||||
|
|
Loading…
Reference in New Issue