Fix AstTransformer extension being converted to base type when changing child node #2056
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.
Description
When using the
AstTransformer, and working on extensions, I noticed in some cases when changing a child node on an extension, the resulting node would wrongly be converted to its base type.Here is an example, given:
and changing the field
loginto saysigninusing theAstTransformerwill have the effect of changingMyTypeextension object type to an object type.Resulting document would be:
Fix
This bug happens because the
AstTransformeruses thewithNewChildren()method on each definition to reattach the children and this method being missing in extensions would defer to usingwithNewChildren()on the base definition returning a new instance of the base instead of the extensions.Adding the appropriate override in each extension definition solves the issue.
I also noticed while writing the test, the
AstPrinterwas missing knowledge on how to print schema extensions.Testing
Unit test in
AstTransformerTestcovers all types of extensions.Unit test in
AstPrinterTestcovers the missed schema extension printing.(I can backport on 14.x once it merges)