Skip to content

Commit

Permalink
fix(es/codegen): Fix ascii_only for identifiers (#8866)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #8852
  • Loading branch information
kdy1 committed Apr 16, 2024
1 parent 4d73326 commit 2075a23
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 6 deletions.
2 changes: 1 addition & 1 deletion crates/swc/tests/fixture/issues-8xxx/8260/output/1.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
function p(\xb5, \u03C3) {}
function p(\u00b5, \u03C3) {}
console.log(p);
21 changes: 21 additions & 0 deletions crates/swc/tests/fixture/issues-8xxx/8852/input/.swcrc
Original file line number Diff line number Diff line change
@@ -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
}
2 changes: 2 additions & 0 deletions crates/swc/tests/fixture/issues-8xxx/8852/input/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
const módulo = 123;
console.log(módulo);
2 changes: 2 additions & 0 deletions crates/swc/tests/fixture/issues-8xxx/8852/input/2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
const m\u00f3dulo = 123;
console.log(m\u00f3dulo);
2 changes: 2 additions & 0 deletions crates/swc/tests/fixture/issues-8xxx/8852/output/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
var m\u00f3dulo = 123;
console.log(m\u00f3dulo);
2 changes: 2 additions & 0 deletions crates/swc/tests/fixture/issues-8xxx/8852/output/2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
var m\u00f3dulo = 123;
console.log(m\u00f3dulo);
26 changes: 21 additions & 5 deletions crates/swc_ecma_codegen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand Down Expand Up @@ -3959,20 +3964,31 @@ 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);
}
'\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");
Expand Down

0 comments on commit 2075a23

Please sign in to comment.