Skip to content

Commit 2075a23

Browse files
authoredApr 16, 2024··
fix(es/codegen): Fix ascii_only for identifiers (#8866)
**Related issue:** - Closes #8852
1 parent 4d73326 commit 2075a23

File tree

7 files changed

+51
-6
lines changed

7 files changed

+51
-6
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
function p(\xb5, \u03C3) {}
1+
function p(\u00b5, \u03C3) {}
22
console.log(p);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"jsc": {
3+
"parser": {
4+
"syntax": "ecmascript",
5+
"jsx": false
6+
},
7+
"target": "es3",
8+
"loose": false,
9+
"minify": {
10+
"compress": false,
11+
"format": {
12+
"asciiOnly": true
13+
}
14+
}
15+
},
16+
"module": {
17+
"type": "es6"
18+
},
19+
"minify": false,
20+
"isModule": true
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const módulo = 123;
2+
console.log(módulo);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const m\u00f3dulo = 123;
2+
console.log(m\u00f3dulo);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
var m\u00f3dulo = 123;
2+
console.log(m\u00f3dulo);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
var m\u00f3dulo = 123;
2+
console.log(m\u00f3dulo);

‎crates/swc_ecma_codegen/src/lib.rs

+21-5
Original file line numberDiff line numberDiff line change
@@ -3871,7 +3871,12 @@ fn get_ascii_only_ident(sym: &str, may_need_quote: bool, target: EsVersion) -> C
38713871
while let Some(c) = iter.next() {
38723872
match c {
38733873
'\x00' => {
3874-
buf.push_str("\\x00");
3874+
if may_need_quote {
3875+
need_quote = true;
3876+
let _ = write!(buf, "\\x00");
3877+
} else {
3878+
let _ = write!(buf, "\\u0000");
3879+
}
38753880
}
38763881
'\u{0008}' => buf.push_str("\\b"),
38773882
'\u{000c}' => buf.push_str("\\f"),
@@ -3959,20 +3964,31 @@ fn get_ascii_only_ident(sym: &str, may_need_quote: bool, target: EsVersion) -> C
39593964
buf.push('"');
39603965
}
39613966
'\x01'..='\x0f' if !first => {
3962-
let _ = write!(buf, "\\x0{:x}", c as u8);
3967+
if may_need_quote {
3968+
need_quote = true;
3969+
let _ = write!(buf, "\\x{:x}", c as u8);
3970+
} else {
3971+
let _ = write!(buf, "\\u00{:x}", c as u8);
3972+
}
39633973
}
39643974
'\x10'..='\x1f' if !first => {
3965-
let _ = write!(buf, "\\x{:x}", c as u8);
3975+
if may_need_quote {
3976+
need_quote = true;
3977+
let _ = write!(buf, "\\x{:x}", c as u8);
3978+
} else {
3979+
let _ = write!(buf, "\\u00{:x}", c as u8);
3980+
}
39663981
}
39673982
'\x20'..='\x7e' => {
39683983
buf.push(c);
39693984
}
39703985
'\u{7f}'..='\u{ff}' => {
39713986
if may_need_quote {
39723987
need_quote = true;
3988+
let _ = write!(buf, "\\x{:x}", c as u8);
3989+
} else {
3990+
let _ = write!(buf, "\\u00{:x}", c as u8);
39733991
}
3974-
3975-
let _ = write!(buf, "\\x{:x}", c as u8);
39763992
}
39773993
'\u{2028}' => {
39783994
buf.push_str("\\u2028");

0 commit comments

Comments
 (0)
Please sign in to comment.