mirror of
https://github.com/aphrody-labs/oxc.git
synced 2026-10-15 06:39:17 +00:00
fix(transformer): skip recovered using loop patterns (#26722)
Skip resource-management lowering for recovered `for (await using { value } of [])` declarations before changing their kind or scopes. The parser diagnostic is retained, and transformation no longer unwraps a missing binding identifier.
This commit is contained in:
1 parent
313040530c
commit
9220158aaf
1 file changed
+11
-6
@@ -80,19 +80,21 @@ impl<'a> Traverse<'a, TransformState<'a>> for ExplicitResourceManagement<'a> {
|
||||
}
|
||||
let variable_decl_kind = decl.kind;
|
||||
|
||||
// `for (using x of y)` -> `for (const _x of y)`
|
||||
decl.kind = VariableDeclarationKind::Const;
|
||||
|
||||
let variable_declarator = decl.declarations.first_mut().unwrap();
|
||||
|
||||
let variable_declarator_binding_ident =
|
||||
variable_declarator.id.get_binding_identifier().unwrap();
|
||||
let Some(variable_declarator_binding_ident) =
|
||||
variable_declarator.id.get_binding_identifier()
|
||||
else {
|
||||
// The parser already reported the invalid binding pattern.
|
||||
return;
|
||||
};
|
||||
|
||||
let variable_declarator_binding_name = variable_declarator_binding_ident.name;
|
||||
|
||||
let for_of_init_symbol_id = variable_declarator_binding_ident.symbol_id();
|
||||
|
||||
let temp_id = ctx.generate_uid_based_on_node(
|
||||
variable_declarator.id.get_binding_identifier().unwrap(),
|
||||
variable_declarator_binding_ident,
|
||||
for_of_stmt_scope_id,
|
||||
SymbolFlags::ConstVariable | SymbolFlags::BlockScopedVariable,
|
||||
);
|
||||
@@ -100,6 +102,9 @@ impl<'a> Traverse<'a, TransformState<'a>> for ExplicitResourceManagement<'a> {
|
||||
let binding_pattern =
|
||||
mem::replace(&mut variable_declarator.id, temp_id.create_binding_pattern(ctx));
|
||||
|
||||
// `for (using x of y)` -> `for (const _x of y)`
|
||||
decl.kind = VariableDeclarationKind::Const;
|
||||
|
||||
// `using x = _x;`
|
||||
let using_stmt = Statement::new_variable_declaration(
|
||||
SPAN,
|
||||
|
||||
Reference in new issue
Block a user