diff --git a/crates/swc/tests/fixture/issues-8xxx/8260/output/1.js b/crates/swc/tests/fixture/issues-8xxx/8260/output/1.js index ec1e52900f89..f445e9fe77ed 100644 --- a/crates/swc/tests/fixture/issues-8xxx/8260/output/1.js +++ b/crates/swc/tests/fixture/issues-8xxx/8260/output/1.js @@ -1,2 +1,2 @@ -function p(\xb5, \u03C3) {} +function p(\u00b5, \u03C3) {} console.log(p); diff --git a/crates/swc/tests/fixture/issues-8xxx/8852/input/.swcrc b/crates/swc/tests/fixture/issues-8xxx/8852/input/.swcrc new file mode 100644 index 000000000000..7d24715868e1 --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8852/input/.swcrc @@ -0,0 +1,21 @@ +{ + "jsc": { + "parser": { + "syntax": "ecmascript", + "jsx": false + }, + "target": "es3", + "loose": false, + "minify": { + "compress": false, + "format": { + "asciiOnly": true + } + } + }, + "module": { + "type": "es6" + }, + "minify": false, + "isModule": true +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-8xxx/8852/input/1.js b/crates/swc/tests/fixture/issues-8xxx/8852/input/1.js new file mode 100644 index 000000000000..8b5ab0df9e4a --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8852/input/1.js @@ -0,0 +1,2 @@ +const módulo = 123; +console.log(módulo); \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-8xxx/8852/input/2.js b/crates/swc/tests/fixture/issues-8xxx/8852/input/2.js new file mode 100644 index 000000000000..bec72a0f757c --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8852/input/2.js @@ -0,0 +1,2 @@ +const m\u00f3dulo = 123; +console.log(m\u00f3dulo); \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-8xxx/8852/output/1.js b/crates/swc/tests/fixture/issues-8xxx/8852/output/1.js new file mode 100644 index 000000000000..531fbe78d9f2 --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8852/output/1.js @@ -0,0 +1,2 @@ +var m\u00f3dulo = 123; +console.log(m\u00f3dulo); diff --git a/crates/swc/tests/fixture/issues-8xxx/8852/output/2.js b/crates/swc/tests/fixture/issues-8xxx/8852/output/2.js new file mode 100644 index 000000000000..531fbe78d9f2 --- /dev/null +++ b/crates/swc/tests/fixture/issues-8xxx/8852/output/2.js @@ -0,0 +1,2 @@ +var m\u00f3dulo = 123; +console.log(m\u00f3dulo); diff --git a/crates/swc_ecma_codegen/src/lib.rs b/crates/swc_ecma_codegen/src/lib.rs index f2260dc2d73f..d5bd57cbea21 100644 --- a/crates/swc_ecma_codegen/src/lib.rs +++ b/crates/swc_ecma_codegen/src/lib.rs @@ -3871,7 +3871,12 @@ fn get_ascii_only_ident(sym: &str, may_need_quote: bool, target: EsVersion) -> C while let Some(c) = iter.next() { match c { '\x00' => { - buf.push_str("\\x00"); + if may_need_quote { + need_quote = true; + let _ = write!(buf, "\\x00"); + } else { + let _ = write!(buf, "\\u0000"); + } } '\u{0008}' => buf.push_str("\\b"), '\u{000c}' => buf.push_str("\\f"), @@ -3959,10 +3964,20 @@ fn get_ascii_only_ident(sym: &str, may_need_quote: bool, target: EsVersion) -> C buf.push('"'); } '\x01'..='\x0f' if !first => { - let _ = write!(buf, "\\x0{:x}", c as u8); + if may_need_quote { + need_quote = true; + let _ = write!(buf, "\\x{:x}", c as u8); + } else { + let _ = write!(buf, "\\u00{:x}", c as u8); + } } '\x10'..='\x1f' if !first => { - let _ = write!(buf, "\\x{:x}", c as u8); + if may_need_quote { + need_quote = true; + let _ = write!(buf, "\\x{:x}", c as u8); + } else { + let _ = write!(buf, "\\u00{:x}", c as u8); + } } '\x20'..='\x7e' => { buf.push(c); @@ -3970,9 +3985,10 @@ fn get_ascii_only_ident(sym: &str, may_need_quote: bool, target: EsVersion) -> C '\u{7f}'..='\u{ff}' => { if may_need_quote { need_quote = true; + let _ = write!(buf, "\\x{:x}", c as u8); + } else { + let _ = write!(buf, "\\u00{:x}", c as u8); } - - let _ = write!(buf, "\\x{:x}", c as u8); } '\u{2028}' => { buf.push_str("\\u2028");