fix(compiler): Handle 'using' and 'await using' declarations #35178
+27
−13
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.
Fixes #35171
Hey! This PR fixes a bug where React Compiler was breaking the new JavaScript
usingsyntax.The Problem:
When you write code like this:
using resource = new Disposable("render");
React Compiler was stripping out the
usingkeyword and turning it into:new Disposable("render");
This completely breaks the disposal mechanism - Symbol.dispose() never gets called and you get resource leaks.
What I Did:
I added a check in BuildHIR.ts (around line 868) that makes the compiler bail out when it sees
usingorawait usingdeclarations. Now instead of breaking your code, it just skips compiling that component and shows a "not yet supported" message.Changes:
usingandawait usingTesting:
I tested this with the example from issue #35171. Now the disposal works correctly and the compiler doesn't mess up the using syntax.
This is a temporary fix - in the future we could fully support
usingby properly tracking disposal through the compilation pipeline. But for now, this at least prevents the bug.