diff --git a/internal/schema/framework_identifier.go b/internal/schema/framework_identifier.go index 51a3837b..d9858e49 100644 --- a/internal/schema/framework_identifier.go +++ b/internal/schema/framework_identifier.go @@ -78,10 +78,20 @@ func (identifier FrameworkIdentifier) ToPrefixCamelCase(prefix string) string { // ToPascalCase will return a pascal case formatted string of the identifier. // Example: // - example_resource_thing -> ExampleResourceThing +// - _id -> UnderscoreId func (identifier FrameworkIdentifier) ToPascalCase() string { - return snakeLetters.ReplaceAllStringFunc(string(identifier), func(s string) string { + input := string(identifier) + + result := snakeLetters.ReplaceAllStringFunc(input, func(s string) string { return strings.ToUpper(strings.Replace(s, "_", "", -1)) }) + + // Preserve leading underscore to avoid collisions (e.g., _id vs id). + if strings.HasPrefix(input, "_") { + result = "Underscore" + result + } + + return result } // ToPrefixPascalCase will return a pascal case formatted string of the identifier, diff --git a/internal/schema/framework_identifier_test.go b/internal/schema/framework_identifier_test.go index 43e97988..bb2fea03 100644 --- a/internal/schema/framework_identifier_test.go +++ b/internal/schema/framework_identifier_test.go @@ -79,7 +79,7 @@ func TestFrameworkIdentifier_ToCamelCase(t *testing.T) { }, "leading underscore": { identifier: "_thing", - want: "thing", + want: "underscoreThing", }, "middle underscore": { identifier: "fake_thing", @@ -120,7 +120,7 @@ func TestFrameworkIdentifier_ToPrefixCamelCase(t *testing.T) { }, "leading underscore": { identifier: "_thing", - want: "thing", + want: "underscoreThing", }, "middle underscore": { identifier: "fake_thing", @@ -193,7 +193,7 @@ func TestFrameworkIdentifier_ToPascalCase(t *testing.T) { }, "leading underscore": { identifier: "_thing", - want: "Thing", + want: "UnderscoreThing", }, "middle underscore": { identifier: "fake_thing", @@ -234,7 +234,7 @@ func TestFrameworkIdentifier_ToPrefixPascalCase(t *testing.T) { }, "leading underscore": { identifier: "_thing", - want: "Thing", + want: "UnderscoreThing", }, "middle underscore": { identifier: "fake_thing",