From e8c58cfd779f7c9dcfae06200ec2f726fbc74758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 31 Jul 2023 12:31:37 +0900 Subject: [PATCH] fix(es/utils): Fix string evaluation of array literals (#7731) **Related issue:** - Closes #7714. --- .../tests/fixture/issues/7714/1/config.json | 4 ++++ .../tests/fixture/issues/7714/1/input.js | 1 + .../tests/fixture/issues/7714/1/output.js | 1 + crates/swc_ecma_utils/src/lib.rs | 9 ++++----- 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/7714/1/config.json create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/7714/1/input.js create mode 100644 crates/swc_ecma_minifier/tests/fixture/issues/7714/1/output.js diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/config.json b/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/config.json new file mode 100644 index 000000000000..7990f01208b3 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/config.json @@ -0,0 +1,4 @@ +{ + "defaults": true, + "evaluate": true +} diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/input.js b/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/input.js new file mode 100644 index 000000000000..0ea1ca9e089a --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/input.js @@ -0,0 +1 @@ +console.log(`${[1, 1]}`) diff --git a/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/output.js b/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/output.js new file mode 100644 index 000000000000..cb5fdd9ec144 --- /dev/null +++ b/crates/swc_ecma_minifier/tests/fixture/issues/7714/1/output.js @@ -0,0 +1 @@ +console.log("1,1"); diff --git a/crates/swc_ecma_utils/src/lib.rs b/crates/swc_ecma_utils/src/lib.rs index d6a8ca25cae7..c43f0d7d3c2b 100644 --- a/crates/swc_ecma_utils/src/lib.rs +++ b/crates/swc_ecma_utils/src/lib.rs @@ -1032,10 +1032,11 @@ pub trait ExprExt { Unknown => return Value::Unknown, })), Expr::Array(ArrayLit { ref elems, .. }) => { - let mut first = true; let mut buf = String::new(); + let len = elems.len(); // null, undefined is "" in array literal. - for elem in elems { + for (idx, elem) in elems.iter().enumerate() { + let last = idx == len - 1; let e = match *elem { Some(ref elem) => { let ExprOrSpread { ref expr, .. } = *elem; @@ -1055,9 +1056,7 @@ pub trait ExprExt { }; buf.push_str(&e); - if first { - first = false; - } else { + if !last { buf.push(','); } }