fix(compiler): qualify cross-file protobuf bindings through the owning const map - #162
Merged
Conversation
…g const map A same-package sibling field constructor qualified the referenced message class with the Go safe identifier of the struct name. When protoc-gen-go applies digit-camel capitalization the sibling binding's exported const spells the name differently, such as V86fs versus the struct name V86Fs, so the emitted reference dangled. Record each binding file's bound message names in the package-wide registry and qualify cross-file constructors through that map, emitting the actual exported const spelling. Fall back to the safe identifier when a message has no bound name. Signed-off-by: Christian Stewart <christian@aperture.us>
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.
A same-package sibling field constructor qualified the referenced message class with the Go safe identifier of the struct name. When protoc-gen-go applies digit-camel capitalization, the sibling binding's exported const spells the name differently — V86fs versus the struct name V86Fs — so the emitted reference dangled, breaking any proto package that combines digit-camel message names with same-package cross-file references.
The package-wide binding registry now records each binding file's bound message names alongside its import source and output name. Cross-file constructors qualify through that map and emit the actual exported const spelling, falling back to the safe identifier when a message has no bound name. Exact-match bindings are unchanged.
Adds TestProtobufTypeScriptBindingCrossFileDigitCamelFieldCtor, which fails against the dangling V86Fs reference before the fix and asserts the emitted constructor resolves to the sibling's actual V86fs const after it.