diff --git a/protogen/names.go b/protogen/names.go index 445613fc..9da11d99 100644 --- a/protogen/names.go +++ b/protogen/names.go @@ -136,6 +136,8 @@ func camelCase(s string) string { for ; i < len(s); i++ { c := s[i] switch { + case c == '.' && i+1 < len(s) && isASCIILower(s[i+1]): + // Skip over ., to match historic behavior. case c == '.': t = append(t, '_') // Convert . to _. case c == '_' && (i == 0 || s[i-1] == '.'): diff --git a/protogen/names_test.go b/protogen/names_test.go index 05e698e1..3271954b 100644 --- a/protogen/names_test.go +++ b/protogen/names_test.go @@ -18,8 +18,10 @@ func TestCamelCase(t *testing.T) { {"OneTwo", "OneTwo"}, {"_", "X"}, {"_a_", "XA_"}, - {"one.two", "One_Two"}, - {"one_two.three_four", "OneTwo_ThreeFour"}, + {"one.two", "OneTwo"}, + {"one.Two", "One_Two"}, + {"one_two.three_four", "OneTwoThreeFour"}, + {"one_two.Three_four", "OneTwo_ThreeFour"}, {"_one._two", "XOne_XTwo"}, {"SCREAMING_SNAKE_CASE", "SCREAMING_SNAKE_CASE"}, {"double__underscore", "Double_Underscore"},