Skip to content

Commit

Permalink
fix(es/codegen): Add quotes to property names when ascii_only is `t…
Browse files Browse the repository at this point in the history
…rue` (#7820)

**Related issue:**

 - Closes #7805.
  • Loading branch information
kdy1 committed Aug 16, 2023
1 parent e9dfe87 commit 04921f3
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 11 deletions.
4 changes: 2 additions & 2 deletions crates/swc/tests/fixture/issues-7xxx/7240/output/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ Object.defineProperty(exports, "__esModule", {
}
});
var _obj, _default = ((_obj = {
\u3131: "\u11B0",
\u3141: "\u11B1"
"\u3131": "\u11B0",
"\u3141": "\u11B1"
})["\u3142"] = "\u11B2", _obj);
22 changes: 22 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7805/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": false
},
"externalHelpers": true,
"loose": false,
"minify": {
"compress": false,
"mangle": false,
"format": {
"asciiOnly": true
}
}
},
"module": {
"type": "es6"
},
"minify": false,
"isModule": true
}
48 changes: 48 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7805/input/1.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 39 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7805/output/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
var SUPPORTED_LOCALE = {
tr: {
regexp: /\u0130|\u0049|\u0049\u0307/g,
map: {
"\u0130": "i",
I: "\u0131",
"I\u0307": "i"
}
},
az: {
regexp: /\u0130/g,
map: {
"\u0130": "i",
I: "\u0131",
"I\u0307": "i"
}
},
lt: {
regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g,
map: {
I: "i\u0307",
J: "j\u0307",
"\u012E": "\u012F\u0307",
"\xcc": "i\u0307\u0300",
"\xcd": "i\u0307\u0301",
"\u0128": "i\u0307\u0303"
}
}
};
export function localeLowerCase(str, locale) {
var lang = SUPPORTED_LOCALE[locale.toLowerCase()];
if (lang) return lowerCase(str.replace(lang.regexp, function(m) {
return lang.map[m];
}));
return lowerCase(str);
}
export function lowerCase(str) {
return str.toLowerCase();
}
20 changes: 18 additions & 2 deletions crates/swc_ecma_codegen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1603,8 +1603,24 @@ where

#[emitter]
fn emit_prop_name(&mut self, node: &PropName) -> Result {
match *node {
PropName::Ident(ref n) => emit!(n),
match node {
PropName::Ident(ident) => {
if self.cfg.ascii_only && !ident.sym.is_ascii() {
punct!("\"");
self.wr.write_symbol(
DUMMY_SP,
&get_ascii_only_ident(
&handle_invalid_unicodes(&ident.sym),
self.cfg.target,
),
)?;
punct!("\"");

return Ok(());
}

emit!(ident)
}
PropName::Str(ref n) => emit!(n),
PropName::Num(ref n) => emit!(n),
PropName::BigInt(ref n) => emit!(n),
Expand Down
14 changes: 7 additions & 7 deletions crates/swc_ecma_codegen/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -872,17 +872,17 @@ fn ascii_only_tpl_lit() {
#[test]
fn ascii_only_issue_7240() {
test_all(
r"
r#"
export default {
\u3131: '\u11B0',
"\u3131": '\u11B0',
}
",
r"
"#,
r#"
export default {
\u3131: '\u11B0'
"\u3131": '\u11B0'
};
",
r#"export default{\u3131:"\u11B0"}"#,
"#,
r#"export default{"\u3131":"\u11B0"}"#,
Config {
ascii_only: true,
..Default::default()
Expand Down

1 comment on commit 04921f3

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 04921f3 Previous: 981d7b1 Ratio
es/full/bugs-1 290245 ns/iter (± 8417) 289459 ns/iter (± 3587) 1.00
es/full/minify/libraries/antd 1324895948 ns/iter (± 14357310) 1330727513 ns/iter (± 34598979) 1.00
es/full/minify/libraries/d3 278512893 ns/iter (± 2012392) 278224504 ns/iter (± 2548501) 1.00
es/full/minify/libraries/echarts 1058004075 ns/iter (± 6635286) 1058670113 ns/iter (± 10972379) 1.00
es/full/minify/libraries/jquery 84625550 ns/iter (± 249041) 84833160 ns/iter (± 316477) 1.00
es/full/minify/libraries/lodash 98582070 ns/iter (± 312744) 98527912 ns/iter (± 356825) 1.00
es/full/minify/libraries/moment 49883600 ns/iter (± 65555) 49936635 ns/iter (± 127278) 1.00
es/full/minify/libraries/react 17995384 ns/iter (± 34712) 17960580 ns/iter (± 55612) 1.00
es/full/minify/libraries/terser 218620627 ns/iter (± 2133765) 218829885 ns/iter (± 910541) 1.00
es/full/minify/libraries/three 384061854 ns/iter (± 3392862) 386830207 ns/iter (± 3007863) 0.99
es/full/minify/libraries/typescript 2653312983 ns/iter (± 13652325) 2695894386 ns/iter (± 82484052) 0.98
es/full/minify/libraries/victory 569613220 ns/iter (± 2746258) 575574233 ns/iter (± 3599842) 0.99
es/full/minify/libraries/vue 120440646 ns/iter (± 330273) 120938463 ns/iter (± 449720) 1.00
es/full/codegen/es3 34272 ns/iter (± 109) 34763 ns/iter (± 80) 0.99
es/full/codegen/es5 34296 ns/iter (± 85) 34897 ns/iter (± 72) 0.98
es/full/codegen/es2015 34199 ns/iter (± 82) 35004 ns/iter (± 68) 0.98
es/full/codegen/es2016 34164 ns/iter (± 61) 35045 ns/iter (± 50) 0.97
es/full/codegen/es2017 34164 ns/iter (± 66) 34940 ns/iter (± 50) 0.98
es/full/codegen/es2018 34210 ns/iter (± 69) 34982 ns/iter (± 63) 0.98
es/full/codegen/es2019 34179 ns/iter (± 84) 34939 ns/iter (± 37) 0.98
es/full/codegen/es2020 34205 ns/iter (± 127) 34929 ns/iter (± 84) 0.98
es/full/all/es3 168165178 ns/iter (± 1532182) 167311344 ns/iter (± 1143664) 1.01
es/full/all/es5 160396385 ns/iter (± 613749) 159488375 ns/iter (± 1151677) 1.01
es/full/all/es2015 119305615 ns/iter (± 1005300) 119721333 ns/iter (± 540453) 1.00
es/full/all/es2016 118735276 ns/iter (± 780053) 118524574 ns/iter (± 765701) 1.00
es/full/all/es2017 118027028 ns/iter (± 464716) 117765075 ns/iter (± 699709) 1.00
es/full/all/es2018 116091281 ns/iter (± 467666) 115718305 ns/iter (± 767999) 1.00
es/full/all/es2019 115681174 ns/iter (± 579658) 115470755 ns/iter (± 665725) 1.00
es/full/all/es2020 111102166 ns/iter (± 767164) 110697089 ns/iter (± 703354) 1.00
es/full/parser 489550 ns/iter (± 5484) 493288 ns/iter (± 16906) 0.99
es/full/base/fixer 19070 ns/iter (± 340) 17801 ns/iter (± 137) 1.07
es/full/base/resolver_and_hygiene 80636 ns/iter (± 269) 80254 ns/iter (± 150) 1.00
serialization of serde 290 ns/iter (± 0) 299 ns/iter (± 1) 0.97
css/minify/libraries/bootstrap 28598691 ns/iter (± 291168) 29040923 ns/iter (± 51147) 0.98
css/visitor/compare/clone 1642216 ns/iter (± 9842) 1627981 ns/iter (± 3724) 1.01
css/visitor/compare/visit_mut_span 1772012 ns/iter (± 5516) 1748240 ns/iter (± 5798) 1.01
css/visitor/compare/visit_mut_span_panic 1846461 ns/iter (± 4977) 1831337 ns/iter (± 6636) 1.01
css/visitor/compare/fold_span 2596127 ns/iter (± 20242) 2546755 ns/iter (± 14400) 1.02
css/visitor/compare/fold_span_panic 2762385 ns/iter (± 16789) 2751554 ns/iter (± 5709) 1.00
css/lexer/bootstrap_5_1_3 4557518 ns/iter (± 39640) 4510202 ns/iter (± 33017) 1.01
css/lexer/foundation_6_7_4 3825223 ns/iter (± 5001) 3804135 ns/iter (± 3102) 1.01
css/lexer/tailwind_3_1_1 726238 ns/iter (± 1766) 723969 ns/iter (± 1038) 1.00
css/parser/bootstrap_5_1_3 18806602 ns/iter (± 47455) 19216991 ns/iter (± 126953) 0.98
css/parser/foundation_6_7_4 15121745 ns/iter (± 17710) 15276927 ns/iter (± 15239) 0.99
css/parser/tailwind_3_1_1 2994451 ns/iter (± 4386) 2980810 ns/iter (± 4607) 1.00
es/codegen/colors 738620 ns/iter (± 403852) 735386 ns/iter (± 405726) 1.00
es/codegen/large 3146420 ns/iter (± 1667474) 3148640 ns/iter (± 1682783) 1.00
es/codegen/with-parser/colors 45353 ns/iter (± 448) 45952 ns/iter (± 258) 0.99
es/codegen/with-parser/large 486254 ns/iter (± 1387) 485309 ns/iter (± 1255) 1.00
es/minify/libraries/antd 1159086074 ns/iter (± 10494281) 1155928729 ns/iter (± 11125575) 1.00
es/minify/libraries/d3 242810713 ns/iter (± 1345836) 242295541 ns/iter (± 972004) 1.00
es/minify/libraries/echarts 915608812 ns/iter (± 2316819) 917882461 ns/iter (± 8790555) 1.00
es/minify/libraries/jquery 74246479 ns/iter (± 127988) 74065607 ns/iter (± 118158) 1.00
es/minify/libraries/lodash 88485017 ns/iter (± 302840) 88019536 ns/iter (± 113698) 1.01
es/minify/libraries/moment 43810572 ns/iter (± 80020) 43402563 ns/iter (± 78345) 1.01
es/minify/libraries/react 16085807 ns/iter (± 45735) 15970604 ns/iter (± 47207) 1.01
es/minify/libraries/terser 188243620 ns/iter (± 625855) 185911929 ns/iter (± 641651) 1.01
es/minify/libraries/three 324343965 ns/iter (± 1744746) 319836816 ns/iter (± 3230724) 1.01
es/minify/libraries/typescript 2289513036 ns/iter (± 10763059) 2255437983 ns/iter (± 10885402) 1.02
es/minify/libraries/victory 487441752 ns/iter (± 4537643) 483362069 ns/iter (± 2255604) 1.01
es/minify/libraries/vue 107814619 ns/iter (± 237923) 106877958 ns/iter (± 447523) 1.01
es/visitor/compare/clone 1967287 ns/iter (± 6617) 1957351 ns/iter (± 5187) 1.01
es/visitor/compare/visit_mut_span 2277181 ns/iter (± 15836) 2292004 ns/iter (± 2481) 0.99
es/visitor/compare/visit_mut_span_panic 2352458 ns/iter (± 4434) 2336403 ns/iter (± 5700) 1.01
es/visitor/compare/fold_span 3415559 ns/iter (± 8084) 3403216 ns/iter (± 7471) 1.00
es/visitor/compare/fold_span_panic 3507489 ns/iter (± 7441) 3497278 ns/iter (± 8101) 1.00
es/lexer/colors 13187 ns/iter (± 13) 13006 ns/iter (± 9) 1.01
es/lexer/angular 6215337 ns/iter (± 8512) 6152919 ns/iter (± 12449) 1.01
es/lexer/backbone 799503 ns/iter (± 895) 795990 ns/iter (± 647) 1.00
es/lexer/jquery 4548720 ns/iter (± 7381) 4520890 ns/iter (± 5909) 1.01
es/lexer/jquery mobile 6953183 ns/iter (± 12612) 6879077 ns/iter (± 16468) 1.01
es/lexer/mootools 3608379 ns/iter (± 3510) 3555791 ns/iter (± 2863) 1.01
es/lexer/underscore 667367 ns/iter (± 833) 666256 ns/iter (± 435) 1.00
es/lexer/three 21586226 ns/iter (± 26821) 21519271 ns/iter (± 17859) 1.00
es/lexer/yui 3879551 ns/iter (± 4830) 3862285 ns/iter (± 2313) 1.00
es/parser/colors 27130 ns/iter (± 36) 27399 ns/iter (± 57) 0.99
es/parser/angular 13421488 ns/iter (± 66659) 13670811 ns/iter (± 63117) 0.98
es/parser/backbone 1998011 ns/iter (± 11354) 1992541 ns/iter (± 9358) 1.00
es/parser/jquery 10863019 ns/iter (± 115377) 10925050 ns/iter (± 53532) 0.99
es/parser/jquery mobile 16642486 ns/iter (± 49694) 16807699 ns/iter (± 52285) 0.99
es/parser/mootools 8369254 ns/iter (± 32432) 8430861 ns/iter (± 17684) 0.99
es/parser/underscore 1723238 ns/iter (± 8761) 1731804 ns/iter (± 7779) 1.00
es/parser/three 46746375 ns/iter (± 190691) 47181567 ns/iter (± 343274) 0.99
es/parser/yui 8213383 ns/iter (± 29962) 8291128 ns/iter (± 27392) 0.99
es/preset-env/usage/builtin_type 139107 ns/iter (± 32807) 136100 ns/iter (± 31202) 1.02
es/preset-env/usage/property 17173 ns/iter (± 112) 17424 ns/iter (± 70) 0.99
es/resolver/typescript 88906878 ns/iter (± 1449039) 87597997 ns/iter (± 1318263) 1.01
es/fixer/typescript 64253491 ns/iter (± 587982) 62834658 ns/iter (± 1860467) 1.02
es/hygiene/typescript 131476530 ns/iter (± 840188) 132714374 ns/iter (± 1926240) 0.99
es/resolver_with_hygiene/typescript 244815235 ns/iter (± 1001640) 241383920 ns/iter (± 1313789) 1.01
es/visitor/base-perf/module_clone 60290 ns/iter (± 187) 58915 ns/iter (± 858) 1.02
es/visitor/base-perf/fold_empty 64309 ns/iter (± 717) 62603 ns/iter (± 657) 1.03
es/visitor/base-perf/fold_noop_impl_all 65091 ns/iter (± 338) 63205 ns/iter (± 409) 1.03
es/visitor/base-perf/fold_noop_impl_vec 65115 ns/iter (± 235) 63391 ns/iter (± 242) 1.03
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 39 ns/iter (± 0) 39 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 108 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 78 ns/iter (± 0) 1
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2641 ns/iter (± 13) 2680 ns/iter (± 24) 0.99
es/base/parallel/resolver/typescript 3729121258 ns/iter (± 232758731) 3793063312 ns/iter (± 232148673) 0.98
es/base/parallel/hygiene/typescript 1444069534 ns/iter (± 17842857) 1514608318 ns/iter (± 24038974) 0.95
misc/visitors/time-complexity/time 5 139 ns/iter (± 0) 139 ns/iter (± 2) 1
misc/visitors/time-complexity/time 10 402 ns/iter (± 5) 382 ns/iter (± 7) 1.05
misc/visitors/time-complexity/time 15 525 ns/iter (± 87) 728 ns/iter (± 31) 0.72
misc/visitors/time-complexity/time 20 1090 ns/iter (± 12) 1153 ns/iter (± 69) 0.95
misc/visitors/time-complexity/time 40 3632 ns/iter (± 9) 4174 ns/iter (± 142) 0.87
misc/visitors/time-complexity/time 60 7562 ns/iter (± 63) 7879 ns/iter (± 311) 0.96
es/full-target/es2016 234356 ns/iter (± 609) 233396 ns/iter (± 633) 1.00
es/full-target/es2017 221421 ns/iter (± 413) 221356 ns/iter (± 620) 1.00
es/full-target/es2018 210339 ns/iter (± 559) 209826 ns/iter (± 734) 1.00
es2020_nullish_coalescing 70390 ns/iter (± 381) 69216 ns/iter (± 420) 1.02
es2020_optional_chaining 81651 ns/iter (± 277) 80631 ns/iter (± 529) 1.01
es2022_class_properties 116797 ns/iter (± 432) 114118 ns/iter (± 360) 1.02
es2018_object_rest_spread 75051 ns/iter (± 251) 74005 ns/iter (± 85) 1.01
es2019_optional_catch_binding 64304 ns/iter (± 131) 64004 ns/iter (± 211) 1.00
es2017_async_to_generator 64581 ns/iter (± 204) 63486 ns/iter (± 276) 1.02
es2016_exponentiation 68405 ns/iter (± 157) 68073 ns/iter (± 253) 1.00
es2015_arrow 71665 ns/iter (± 218) 70278 ns/iter (± 150) 1.02
es2015_block_scoped_fn 67922 ns/iter (± 205) 67046 ns/iter (± 237) 1.01
es2015_block_scoping 124362 ns/iter (± 459) 119171 ns/iter (± 461) 1.04

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.