fix(compiler-core): add isTemplateFor to ast of For nodes #8991
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.
There is an inconsistency in the generated ast between
v-for
andv-if
, thev-for
only returns a For node with it's direct children, thev-if
returns one decorative wrapper node containing the branch nodes as childrenHere is a demonstration https://codesandbox.io/p/sandbox/priceless-cache-t7zwzg
While we can work around this inconsistency for the most part, the original node properties on the
v-for
are entirely lost, there is just no way to know if the node is a template or an element by looking at it to reverse engineer the astEven the
loc.source
does not give this information like thev-if
does (unless looking into thecodeGen.loc.source
)The
IfNode
also has a boolean propertyisTemplateIf
which also gives this informationHere is the difference in
loc
between a v-forand a v-if
As we can see the
v-for
completely drops it's parent information and uses the information of theDirective
, while thev-if
uses the information of theElement
on which it was foundThis PR aims to aleviate a bit this loss of information by adding a
isTemplateFor
and atemplateProps
property to theForNode
to indicate whether the original is a template or an element to know how to interpret the children nodes properly and to be able to retrieve thekey
directive on the template when we reverse engineer the AST