Skip to content

Commit 88caab3

Browse files
compiler/go!: align initialisms with revive
Keep generated identifiers consistent with revive by recognizing ACL, SQL, XMPP, and plural IDs. Consumers regenerating fields containing these words must update references to the new Go names.
1 parent 9eb4dde commit 88caab3

5 files changed

Lines changed: 59 additions & 4 deletions

File tree

compiler/cpp/src/thrift/generate/t_go_generator.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ void t_go_generator::fix_common_initialism(std::string& value, int i) const {
501501
std::string word = value.substr(i, wordLen);
502502
std::transform(word.begin(), word.end(), word.begin(), ::toupper);
503503
if (commonInitialisms.find(word) != commonInitialisms.end()) {
504-
value.replace(i, word.length(), word);
504+
value.replace(i, word.length(), word == "IDS" ? "IDs" : word);
505505
}
506506
}
507507
}
@@ -716,7 +716,8 @@ void t_go_generator::init_generator() {
716716
string target = module;
717717
package_dir_ = get_out_dir();
718718

719-
// This set is taken from https://github.com/golang/lint/blob/master/lint.go#L692
719+
// This set is mirrored from https://github.com/mgechev/revive/blob/master/internal/rule/name.go.
720+
commonInitialisms.insert("ACL");
720721
commonInitialisms.insert("API");
721722
commonInitialisms.insert("ASCII");
722723
commonInitialisms.insert("CPU");
@@ -728,6 +729,7 @@ void t_go_generator::init_generator() {
728729
commonInitialisms.insert("HTTP");
729730
commonInitialisms.insert("HTTPS");
730731
commonInitialisms.insert("ID");
732+
commonInitialisms.insert("IDS");
731733
commonInitialisms.insert("IP");
732734
commonInitialisms.insert("JSON");
733735
commonInitialisms.insert("LHS");
@@ -737,6 +739,7 @@ void t_go_generator::init_generator() {
737739
commonInitialisms.insert("RPC");
738740
commonInitialisms.insert("SLA");
739741
commonInitialisms.insert("SMTP");
742+
commonInitialisms.insert("SQL");
740743
commonInitialisms.insert("SSH");
741744
commonInitialisms.insert("TCP");
742745
commonInitialisms.insert("TLS");
@@ -750,6 +753,7 @@ void t_go_generator::init_generator() {
750753
commonInitialisms.insert("UTF8");
751754
commonInitialisms.insert("VM");
752755
commonInitialisms.insert("XML");
756+
commonInitialisms.insert("XMPP");
753757
commonInitialisms.insert("XSRF");
754758
commonInitialisms.insert("XSS");
755759

lib/go/test/InitialismsTest.thrift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,10 @@
2020
struct InitialismsTest {
2121
1: string user_id,
2222
2: string server_url,
23-
3: string id,
23+
3: string id,
24+
4: string acl,
25+
5: string ids,
26+
6: string sql,
27+
7: string xmpp,
28+
8: string user_ids,
2429
}

lib/go/test/tests/initialisms_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,26 @@ func TestThatCommonInitialismsAreFixed(t *testing.T) {
4747
name: "ID",
4848
haveFieldName: "ID",
4949
},
50+
{
51+
name: "ACL",
52+
haveFieldName: "ACL",
53+
},
54+
{
55+
name: "IDs",
56+
haveFieldName: "IDs",
57+
},
58+
{
59+
name: "SQL",
60+
haveFieldName: "SQL",
61+
},
62+
{
63+
name: "XMPP",
64+
haveFieldName: "XMPP",
65+
},
66+
{
67+
name: "UserIDs",
68+
haveFieldName: "UserIDs",
69+
},
5070
} {
5171
t.Run(tc.name, func(t *testing.T) {
5272
_, ok := st.FieldByName(tc.haveFieldName)

lib/go/thrift/types/gocodegen/camelize.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import (
66
)
77

88
// commonInitialisms is the set of well-known Go initialisms taken from
9-
// https://github.com/golang/lint/blob/master/lint.go#L692 and mirrored in
9+
// https://github.com/mgechev/revive/blob/master/internal/rule/name.go and mirrored in
1010
// compiler/cpp/src/thrift/generate/t_go_generator.cc.
1111
var commonInitialisms = map[string]struct{}{
12+
"ACL": {},
1213
"API": {},
1314
"ASCII": {},
1415
"CPU": {},
@@ -20,6 +21,7 @@ var commonInitialisms = map[string]struct{}{
2021
"HTTP": {},
2122
"HTTPS": {},
2223
"ID": {},
24+
"IDS": {},
2325
"IP": {},
2426
"JSON": {},
2527
"LHS": {},
@@ -29,6 +31,7 @@ var commonInitialisms = map[string]struct{}{
2931
"RPC": {},
3032
"SLA": {},
3133
"SMTP": {},
34+
"SQL": {},
3235
"SSH": {},
3336
"TCP": {},
3437
"TLS": {},
@@ -42,6 +45,7 @@ var commonInitialisms = map[string]struct{}{
4245
"UTF8": {},
4346
"VM": {},
4447
"XML": {},
48+
"XMPP": {},
4549
"XSRF": {},
4650
"XSS": {},
4751
}
@@ -129,6 +133,8 @@ func camelize(s string, public bool) string {
129133
if i == 0 && !public {
130134
// First word, private: keep fully lowercase.
131135
b.WriteString(strings.ToLower(part))
136+
} else if upper == "IDS" {
137+
b.WriteString("IDs")
132138
} else {
133139
b.WriteString(upper)
134140
}

lib/go/thrift/types/gocodegen/camelize_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ func TestPublicize(t *testing.T) {
3737
have: "id",
3838
want: "ID",
3939
},
40+
{
41+
name: "plural IDs",
42+
have: "user_ids",
43+
want: "UserIDs",
44+
},
45+
{
46+
name: "revive initialisms",
47+
have: "acl_sql_xmpp",
48+
want: "ACLSQLXMPP",
49+
},
4050
{
4151
name: "trailing underscore ignored",
4252
have: "foo_",
@@ -105,11 +115,21 @@ func TestPrivatize(t *testing.T) {
105115
have: "id",
106116
want: "id",
107117
},
118+
{
119+
name: "plural IDs at start",
120+
have: "ids_for_user",
121+
want: "idsForUser",
122+
},
108123
{
109124
name: "initialism only in second word",
110125
have: "some_id",
111126
want: "someID",
112127
},
128+
{
129+
name: "plural IDs in second word",
130+
have: "some_ids",
131+
want: "someIDs",
132+
},
113133
} {
114134
t.Run(tc.name, func(t *testing.T) {
115135
assert.Equal(t, tc.want, Privatize(tc.have))

0 commit comments

Comments
 (0)