First pass at implementation of nullish coalescing #488
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 at https://github.com/alangpierce/sucrase/wiki/Sucrase-Optional-Chaining-and-Nullish-Coalescing-Technical-Plan
Some details:
that when we observe a
??
operator, we can mark the first token as being thestart of an optional chain.
ends for each token, which the transformer will use to inject code.
it to be on the RootTransformer instead of just on one of them.
works alongside all existing transforms.
cycle by making NameManager no longer depend on TokenProcessor, since it was
only barely using it anyway.
Some quick perf benchmarks show this as having potentially a 4% slowdown even
for code not using nullish coalescing, though I wasn't able to track down any
specific area of code responsible, and it may have been partially due to
variability or other factors. Except for more egregious cases, I'll leave
performance work as a follow-up.