Skip to content

Commit 42bb6b2

Browse files
committed
feat: unified naming style for variable names
1 parent 3ff6e6e commit 42bb6b2

File tree

4 files changed

+150
-128
lines changed

4 files changed

+150
-128
lines changed

pkg/sql2code/parser/nameFormat.go

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package parser
2+
3+
import (
4+
"strings"
5+
6+
"github.com/huandu/xstrings"
7+
)
8+
9+
var peculiarNouns = map[string]string{
10+
"ID": "Id",
11+
"UID": "Uid",
12+
"UUID": "Uuid",
13+
"GUID": "Guid",
14+
"URI": "Uri",
15+
"URL": "Url",
16+
"IP": "Ip",
17+
"QPS": "Qps",
18+
"API": "Api",
19+
"ASCII": "Ascii",
20+
"CPU": "Cpu",
21+
"CSS": "Css",
22+
"DNS": "Dns",
23+
"EOF": "Eof",
24+
"HTML": "Html",
25+
"HTTP": "Http",
26+
"HTTPS": "Https",
27+
"JSON": "Json",
28+
"LHS": "Lhs",
29+
"RAM": "Ram",
30+
"RHS": "Rhs",
31+
"RPC": "Rpc",
32+
"SLA": "Sla",
33+
"SMTP": "Smtp",
34+
"SSH": "Ssh",
35+
"TLS": "Tls",
36+
"TTL": "Ttl",
37+
"UI": "Ui",
38+
"UTF8": "Utf8",
39+
"VM": "Vm",
40+
"XML": "Xml",
41+
"XSRF": "Xsrf",
42+
"XSS": "Xss",
43+
}
44+
45+
func toCamel(s string) string {
46+
str := xstrings.ToCamelCase(s)
47+
48+
name := strings.ToUpper(str)
49+
if _, ok := peculiarNouns[name]; ok {
50+
return name
51+
}
52+
53+
l := len(str)
54+
for k, v := range peculiarNouns {
55+
nl := len(v)
56+
if l > nl {
57+
if str[l-nl:] == v {
58+
str = str[:l-nl] + k
59+
break
60+
}
61+
}
62+
}
63+
64+
if str == "_ID" { // special case for table column ID
65+
str = "ID"
66+
}
67+
68+
return str
69+
}
70+
71+
func firstLetterToLower(str string) string {
72+
if len(str) == 0 {
73+
return str
74+
}
75+
76+
if (str[0] >= 'A' && str[0] <= 'Z') || (str[0] >= 'a' && str[0] <= 'z') {
77+
return strings.ToLower(str[:1]) + str[1:]
78+
}
79+
80+
return str
81+
}
82+
83+
func customToCamel(str string) string {
84+
str = toCamel(str)
85+
86+
if _, ok := peculiarNouns[str]; ok {
87+
str = strings.ToLower(str)
88+
} else {
89+
str = firstLetterToLower(str)
90+
}
91+
92+
return str
93+
}
94+
95+
func customToSnake(str string) string {
96+
str = toCamel(str)
97+
l := len(str)
98+
for k, _ := range peculiarNouns {
99+
if str == k {
100+
str = strings.ToLower(str)
101+
break
102+
}
103+
104+
nl := len(k)
105+
if l > nl {
106+
if str[l-nl:] == k {
107+
str = str[:l-nl] + "_" + strings.ToLower(k)
108+
break
109+
}
110+
}
111+
}
112+
113+
str = xstrings.ToSnakeCase(str)
114+
if strings.HasPrefix(str, "__") {
115+
str = str[1:]
116+
}
117+
118+
return str
119+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package parser
2+
3+
import (
4+
"testing"
5+
)
6+
7+
func TestNameFormat(t *testing.T) {
8+
names := [][]string{
9+
{"id_", "_id", "id", "iD", "ID", "Id", "order_id", "orderId", "orderID", "OrderID"},
10+
{"ip_", "_ip", "ip", "iP", "IP", "Ip", "host_ip", "hostIp", "hostIP", "HostIP"},
11+
{"url_", "_url", "url", "uRL", "URL", "Url", "blog_url", "blogUrl", "blogURL", "BlogURL"},
12+
{"_user_name", "user_name", "userName", "UserName"},
13+
{"_zh_中文", "zh_中文", "中文zh"},
14+
}
15+
16+
for _, ns := range names {
17+
var convertNames []string
18+
var convertNames2 []string
19+
var convertNames3 []string
20+
for _, name := range ns {
21+
convertNames = append(convertNames, toCamel(name))
22+
convertNames2 = append(convertNames2, customToCamel(name))
23+
convertNames3 = append(convertNames3, customToSnake(name))
24+
}
25+
t.Log("source: ", ns)
26+
t.Log("toCamel: ", convertNames)
27+
t.Log("customToCamel:", convertNames2)
28+
t.Log("customToSnake:", convertNames3)
29+
println()
30+
}
31+
}

pkg/sql2code/parser/parser.go

Lines changed: 0 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"strings"
1313
"text/template"
1414

15-
"github.com/huandu/xstrings"
1615
"github.com/jinzhu/inflection"
1716
"github.com/zhufuyi/sqlparser/ast"
1817
"github.com/zhufuyi/sqlparser/dependency/mysql"
@@ -1287,114 +1286,3 @@ func getDefaultValue(expr ast.ExprNode) (value string) {
12871286
}
12881287
return value
12891288
}
1290-
1291-
var acronym = map[string]struct{}{
1292-
"ID": {},
1293-
"IP": {},
1294-
}
1295-
1296-
// nolint
1297-
func toCamel(s string) string {
1298-
s = strings.TrimSpace(s)
1299-
if s == "" {
1300-
return s
1301-
}
1302-
s += "."
1303-
1304-
n := strings.Builder{}
1305-
n.Grow(len(s))
1306-
temp := strings.Builder{}
1307-
temp.Grow(len(s))
1308-
wordFirst := true
1309-
for _, v := range []byte(s) {
1310-
vIsCap := v >= 'A' && v <= 'Z'
1311-
vIsLow := v >= 'a' && v <= 'z'
1312-
if wordFirst && vIsLow {
1313-
v -= 'a' - 'A'
1314-
}
1315-
1316-
if vIsCap || vIsLow {
1317-
temp.WriteByte(v)
1318-
wordFirst = false
1319-
} else {
1320-
isNum := v >= '0' && v <= '9'
1321-
wordFirst = isNum || v == '_' || v == ' ' || v == '-' || v == '.'
1322-
if temp.Len() > 0 && wordFirst {
1323-
word := temp.String()
1324-
upper := strings.ToUpper(word)
1325-
if _, ok := acronym[upper]; ok {
1326-
n.WriteString(upper)
1327-
} else {
1328-
n.WriteString(word)
1329-
}
1330-
temp.Reset()
1331-
}
1332-
if isNum {
1333-
n.WriteByte(v)
1334-
}
1335-
}
1336-
}
1337-
str := n.String()
1338-
1339-
if len(str) > 2 {
1340-
if str[len(str)-2:] == "Id" {
1341-
str = str[:len(str)-2] + "ID"
1342-
} else if str[len(str)-2:] == "Ip" {
1343-
str = str[:len(str)-2] + "IP"
1344-
}
1345-
}
1346-
return str
1347-
}
1348-
1349-
func firstLetterToLower(str string) string {
1350-
if len(str) == 0 {
1351-
return str
1352-
}
1353-
1354-
if (str[0] >= 'A' && str[0] <= 'Z') || (str[0] >= 'a' && str[0] <= 'z') {
1355-
return strings.ToLower(str[:1]) + str[1:]
1356-
}
1357-
1358-
return str
1359-
}
1360-
1361-
func customToCamel(str string) string {
1362-
str = firstLetterToLower(toCamel(str))
1363-
1364-
if len(str) == 2 {
1365-
if str == "iD" {
1366-
str = "id"
1367-
} else if str == "iP" {
1368-
str = "ip"
1369-
}
1370-
}
1371-
1372-
return str
1373-
}
1374-
1375-
func customToSnake(str string) string {
1376-
if len(str) == 0 {
1377-
return str
1378-
}
1379-
1380-
index := 0
1381-
for _, c := range str {
1382-
if c != '_' {
1383-
break
1384-
}
1385-
index++
1386-
}
1387-
if index != 0 {
1388-
str = str[index:]
1389-
}
1390-
1391-
if len(str) == 2 {
1392-
if str == "iD" {
1393-
str = "id"
1394-
} else if str == "iP" {
1395-
str = "ip"
1396-
}
1397-
}
1398-
1399-
return xstrings.ToSnakeCase(str)
1400-
}

pkg/sql2code/parser/parser_test.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -264,22 +264,6 @@ func TestParseSQLs(t *testing.T) {
264264
}
265265
}
266266

267-
func TestConvertNames(t *testing.T) {
268-
names := []string{"_id", "id", "iD", "user_id", "productId", "orderID", "user_name", "ip", "iP", "host_ip", "myIP"}
269-
var convertNames []string
270-
var convertNames2 []string
271-
var convertNames3 []string
272-
for _, name := range names {
273-
convertNames = append(convertNames, toCamel(name))
274-
convertNames2 = append(convertNames2, customToCamel(name))
275-
convertNames3 = append(convertNames3, customToSnake(name))
276-
}
277-
t.Log("source: ", names)
278-
t.Log("toCamel: ", convertNames)
279-
t.Log("customToCamel:", convertNames2)
280-
t.Log("customToSnake:", convertNames3)
281-
}
282-
283267
func Test_parseOption(t *testing.T) {
284268
opts := []Option{
285269
WithDBDriver("foo"),

0 commit comments

Comments
 (0)