From 342c320bfa1f43f25262c0ba403a51df8228c655 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Sun, 13 Feb 2022 03:34:06 +0800 Subject: [PATCH] fix(es/compat): Fix destructing of `const` (#3545) --- .../src/es2015/destructuring.rs | 12 ++++++++++ .../tests/es2015_destructuring.rs | 22 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs b/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs index 61642d61e85..6b9bd21d9ed 100644 --- a/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs +++ b/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs @@ -960,6 +960,18 @@ impl VisitMut for AssignFolder { *declarators = decls; } + + fn visit_mut_var_decl(&mut self, var_decl: &mut VarDecl) { + var_decl.decls.visit_mut_with(self); + + if var_decl.kind == VarDeclKind::Const { + var_decl.decls.iter_mut().for_each(|v| { + if v.init.is_none() { + v.init = Some(undefined(DUMMY_SP)); + } + }) + } + } } impl Destructuring { diff --git a/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs b/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs index 5830616710f..5ae8d627437 100644 --- a/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs +++ b/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs @@ -2103,3 +2103,25 @@ test!( assert.sameValue(iterCount, 1, 'Iteration occurred as expected'); " ); + +test!( + syntax(), + |_| tr(), + statements_const_id_init_hole, + "\ + const [x] = [,]; + const [y] = [,], [z] = [,] + ", + "\ + const x = void 0; + const y = void 0, z = void 0; + " +); + +test!( + syntax(), + |_| tr(), + statements_let_id_init_hole, + "let [x] = [,];", + "let x;" +);