diff --git a/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs b/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs index e915c3a9490c..d2c2669a8008 100644 --- a/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs +++ b/crates/swc_ecma_transforms_compat/src/es2015/destructuring.rs @@ -160,8 +160,9 @@ impl AssignFolder { if is_literal(&init) { match *init { Expr::Array(arr) - if elems.len() == arr.elems.len() - || (elems.len() < arr.elems.len() && has_rest_pat(&elems)) => + if !elems.is_empty() + && (elems.len() == arr.elems.len() + || (elems.len() < arr.elems.len() && has_rest_pat(&elems))) => { let mut arr_elems = Some(arr.elems.into_iter()); elems.into_iter().for_each(|p| match p { diff --git a/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs b/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs index 0e1f879a9bd8..40d296b45499 100644 --- a/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs +++ b/crates/swc_ecma_transforms_compat/tests/es2015_destructuring.rs @@ -2261,3 +2261,27 @@ test!( "let [x] = [,];", "let x;" ); + +test!( + syntax(), + |_| tr(), + issue_6304, + "let [] = [];", + "let ref = [];" +); + +test!( + syntax(), + |_| tr(), + issue_6304_1, + "let [] = [,];", + "let ref = [,];" +); + +test!( + syntax(), + |_| tr(), + issue_6304_2, + "let [] = [...[1, 2, 3]];", + "let ref = [...[1, 2, 3]];" +);