[Parser] When recovering from expression parsing don't stop at '{' #42214
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.
When recovering from a parser error in an expression, we resumed parsing at a '{'. I assume this was because we wanted to continue inside e.g. an if-body if parsing the condition failed, but it's actually causing more issue because when parsing e.g.
we continue parsing at the
{
of the trailing closure, which is a completely garbage location to continue parsing.The motivating example for this change was (in a result builder)
Here
Text(…)
has an error (because it contains a code completion token) and thus we skiptakeTrailingClosure
, effectively parsingwhich the type checker wasn’t very happy with and thus refused to provide code completion. With this change, we completely drop
takeTrailingClosure {}
. The type checker is a lot happier with that.rdar://78781625