Allow await expressions in optional chaining and nullish coalescing #497
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.
Progress toward #461
Tech plan:
https://github.com/alangpierce/sucrase/wiki/Sucrase-Optional-Chaining-and-Nullish-Coalescing-Technical-Plan
We now scan for an await keyword to indicate that the nullish coalescing or
optional chaining operation is an async one, and in that case, call a different
helper and emit async arrow functions instead of regular ones.
This needed a few extra pieces of information in the token structure:
functions.
can reference it to determine whether to emit an async arrow function.
The extra token state and the duplicated helpers are all a bit ugly, but
hopefully there won't be much more complexity beyond this, and I may investigate
ways to store the token state in a more concise way. And, of course, this
transform will go away eventually when optional chaining is available in node.