fix(parser-jsx): skip text node conversion when expression contains JSX #6032
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.
Summary
When a JSXExpressionContainer contains JSX elements (e.g., from
.map()or conditional rendering), the parser now skips adding a{expression}text placeholder. This prevents false positives for elements like<dl>that don't allow text children.Problem:
Previously, expressions like
{items.map(item => <div>...</div>)}would generate both:{expression}text nodeThis caused validation errors for elements like
<dl>,<ul>,<ol>etc. that don't allow text children.Solution:
Added a
containsJSXElement()function that recursively checks if an expression contains JSX elements. When it does, we skip the text node conversion since the JSX elements will be processed separately.Changes
containsJSXElement()helper function to detect JSX elements within expressionsJSXExpressionContainerhandler to skip text placeholder when expression contains JSXTest plan
It omits expression placeholder when expression contains JSX (dl with map)It omits expression placeholder when expression contains JSX (conditional)It omits expression placeholder in div when expression contains JSXIt keeps expression placeholder when expression does not contain JSXFix #4624