Don't recover from "adjacent jsx elements" parser error#10682
Merged
nicolo-ribaudo merged 1 commit intobabel:masterfrom Nov 8, 2019
Merged
Don't recover from "adjacent jsx elements" parser error#10682nicolo-ribaudo merged 1 commit intobabel:masterfrom
nicolo-ribaudo merged 1 commit intobabel:masterfrom
Conversation
JLHwung
approved these changes
Nov 8, 2019
existentialism
approved these changes
Nov 8, 2019
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Whenever we recover from a parser error, we have to build an invalid AST so that the recovered error is actionable by other tools.
While implementing error recovery, I missed that when we find adjacent JSX nodes I was just throwing away a lot of AST nodes.
This is causing problems with Prettier because, when we parse
<a/><b/>, we just generate the AST for the first JSX element and thus prettier doesn't re-print the second one.I considered wrapping the two nodes with a "fake" fragment, but I decided not to do it because of ASI which doesn't work with JSX elements: in this example, I would want to insert a comma after the first JSX element rather than having a fragment.