Browse Source

protogen: camel-case "Foo.bar" as "FooBar" instead of "Foo_Bar".

Given:

  message Parent {
    message Child1 {}
    message child2 {}
  }

Historic behavior is to generate child messages named:

  Parent_Child1
  ParentChild2

Avoid adding an _ in the latter case.

Change-Id: I49a6732655d64967b8c7bb7ad358ae54d294f7b4
Reviewed-on: https://go-review.googlesource.com/c/140898
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
Damien Neil 7 years ago
parent
commit
3863ee56b5
2 changed files with 6 additions and 2 deletions
  1. 2 0
      protogen/names.go
  2. 4 2
      protogen/names_test.go

+ 2 - 0
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 .<lowercase>, to match historic behavior.
 		case c == '.':
 			t = append(t, '_') // Convert . to _.
 		case c == '_' && (i == 0 || s[i-1] == '.'):

+ 4 - 2
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"},