mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
fix(transformer): strip TS statements from for in/of statement bodies (#4686)
Remove TS statements in body of `for of` and `for in` statements, as well as plain `for`.
This commit is contained in:
parent
54f98973d1
commit
4797eaaab6
4 changed files with 63 additions and 4 deletions
|
|
@ -295,6 +295,14 @@ impl<'a> Traverse<'a> for Transformer<'a> {
|
|||
self.x0_typescript.transform_for_statement(stmt, ctx);
|
||||
}
|
||||
|
||||
fn enter_for_of_statement(&mut self, stmt: &mut ForOfStatement<'a>, ctx: &mut TraverseCtx<'a>) {
|
||||
self.x0_typescript.transform_for_of_statement(stmt, ctx);
|
||||
}
|
||||
|
||||
fn enter_for_in_statement(&mut self, stmt: &mut ForInStatement<'a>, ctx: &mut TraverseCtx<'a>) {
|
||||
self.x0_typescript.transform_for_in_statement(stmt, ctx);
|
||||
}
|
||||
|
||||
fn enter_ts_export_assignment(
|
||||
&mut self,
|
||||
export_assignment: &mut TSExportAssignment<'a>,
|
||||
|
|
|
|||
|
|
@ -445,8 +445,35 @@ impl<'a> TypeScriptAnnotations<'a> {
|
|||
stmt: &mut ForStatement<'a>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
let scope_id = stmt.scope_id.get().unwrap_or(ctx.current_scope_id());
|
||||
Self::replace_with_empty_block_if_ts(&mut stmt.body, scope_id, ctx);
|
||||
Self::replace_for_statement_body_with_empty_block_if_ts(
|
||||
&mut stmt.body,
|
||||
&stmt.scope_id,
|
||||
ctx,
|
||||
);
|
||||
}
|
||||
|
||||
pub fn transform_for_in_statement(
|
||||
&mut self,
|
||||
stmt: &mut ForInStatement<'a>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
Self::replace_for_statement_body_with_empty_block_if_ts(
|
||||
&mut stmt.body,
|
||||
&stmt.scope_id,
|
||||
ctx,
|
||||
);
|
||||
}
|
||||
|
||||
pub fn transform_for_of_statement(
|
||||
&mut self,
|
||||
stmt: &mut ForOfStatement<'a>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
Self::replace_for_statement_body_with_empty_block_if_ts(
|
||||
&mut stmt.body,
|
||||
&stmt.scope_id,
|
||||
ctx,
|
||||
);
|
||||
}
|
||||
|
||||
pub fn transform_while_statement(
|
||||
|
|
@ -465,6 +492,15 @@ impl<'a> TypeScriptAnnotations<'a> {
|
|||
Self::replace_with_empty_block_if_ts(&mut stmt.body, ctx.current_scope_id(), ctx);
|
||||
}
|
||||
|
||||
fn replace_for_statement_body_with_empty_block_if_ts(
|
||||
body: &mut Statement<'a>,
|
||||
scope_id: &Cell<Option<ScopeId>>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
let scope_id = scope_id.get().unwrap_or(ctx.current_scope_id());
|
||||
Self::replace_with_empty_block_if_ts(body, scope_id, ctx);
|
||||
}
|
||||
|
||||
fn replace_with_empty_block_if_ts(
|
||||
stmt: &mut Statement<'a>,
|
||||
parent_scope_id: ScopeId,
|
||||
|
|
|
|||
|
|
@ -195,6 +195,22 @@ impl<'a> TypeScript<'a> {
|
|||
self.annotations.transform_for_statement(stmt, ctx);
|
||||
}
|
||||
|
||||
pub fn transform_for_in_statement(
|
||||
&mut self,
|
||||
stmt: &mut ForInStatement<'a>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
self.annotations.transform_for_in_statement(stmt, ctx);
|
||||
}
|
||||
|
||||
pub fn transform_for_of_statement(
|
||||
&mut self,
|
||||
stmt: &mut ForOfStatement<'a>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
self.annotations.transform_for_of_statement(stmt, ctx);
|
||||
}
|
||||
|
||||
pub fn transform_tagged_template_expression(
|
||||
&mut self,
|
||||
expr: &mut TaggedTemplateExpression<'a>,
|
||||
|
|
|
|||
|
|
@ -2,8 +2,7 @@ commit: d8086f14
|
|||
|
||||
transformer_typescript Summary:
|
||||
AST Parsed : 6456/6456 (100.00%)
|
||||
Positive Passed: 6452/6456 (99.94%)
|
||||
Positive Passed: 6453/6456 (99.95%)
|
||||
Mismatch: "compiler/constEnumNamespaceReferenceCausesNoImport2.ts"
|
||||
Mismatch: "compiler/elidedEmbeddedStatementsReplacedWithSemicolon.ts"
|
||||
Mismatch: "conformance/externalModules/typeOnly/exportDeclaration.ts"
|
||||
Mismatch: "conformance/jsx/inline/inlineJsxAndJsxFragPragmaOverridesCompilerOptions.tsx"
|
||||
|
|
|
|||
Loading…
Reference in a new issue