fix: preserve leading underscores in ToPascalCase to avoid field collisions#11
Merged
Merged
Conversation
…isions Properties like _id and id both normalized to Id in PascalCase, causing Go struct field redeclaration errors. Now _id produces UnderscoreId while id remains Id. This is a targeted fix — only identifiers starting with underscore are affected. The tfsdk tags still use the original attribute name.
There was a problem hiding this comment.
Pull request overview
This PR updates the schema identifier casing logic so Terraform attribute names that begin with _ do not collide with their non-underscored equivalents when generating Go struct field names (e.g., _id vs id).
Changes:
- Update
FrameworkIdentifier.ToPascalCase()to prependUnderscorefor identifiers starting with_. - Update identifier casing tests to reflect the new leading-underscore behavior across camel/pascal conversions.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| internal/schema/framework_identifier.go | Adjusts PascalCase generation to avoid _x/x Go field name collisions by preserving leading underscores via a prefix. |
| internal/schema/framework_identifier_test.go | Updates expected casing outputs for identifiers with leading underscores. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+83
to
+94
| 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 |
Comment on lines
194
to
197
| "leading underscore": { | ||
| identifier: "_thing", | ||
| want: "Thing", | ||
| want: "UnderscoreThing", | ||
| }, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Properties like
_idandidboth normalized toIdin PascalCase, causing Go struct field redeclaration errors:This is common in MongoDB-backed APIs where
_idis the document ID.Fix
ToPascalCasenow prependsUnderscorewhen the identifier starts with_:_id→UnderscoreIdid→Id(unchanged)Only the Go struct field name changes — the
tfsdktag preserves the original attribute name.Result
Testing
go test ./...)make generate+go build ./...succeed