Skip to content

Commit

Permalink
fix(css/utils): Fix minification of class names with whitespace (#6983)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahabhgk committed Feb 23, 2023
1 parent c46c4f5 commit cc1d9bd
Show file tree
Hide file tree
Showing 7 changed files with 12 additions and 16 deletions.

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

Expand Up @@ -2,3 +2,4 @@
.\10FFFFabc:after { content: '\\10FFFFabc' }
.\10FFFF abc:after { content: '\\10FFFF abc' }
.\FEFF:after { content: '\uFEFF' }
.\32 8f99 { color: red }
Expand Up @@ -10,3 +10,6 @@
.:after {
content: "uFEFF";
}
.\32 8f99 {
color: red;
}
@@ -1 +1 @@
.𐿿abc:after{content:"\\10FFF abc"}.􏿿abc:after{content:"\\10FFFFabc"}.􏿿abc:after{content:"\\10FFFF abc"}.:after{content:"uFEFF"}
.𐿿abc:after{content:"\\10FFF abc"}.􏿿abc:after{content:"\\10FFFFabc"}.􏿿abc:after{content:"\\10FFFF abc"}.:after{content:"uFEFF"}.\32 8f99{color:red}

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

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

14 changes: 3 additions & 11 deletions crates/swc_css_utils/src/lib.rs
Expand Up @@ -274,22 +274,14 @@ pub fn serialize_ident(value: &str, minify: bool) -> Cow<'_, str> {
}

// https://github.com/servo/rust-cssparser/blob/4c5d065798ea1be649412532bde481dbd404f44a/src/serializer.rs#L166
fn hex_escape(ascii_byte: u8, minify: bool) -> String {
fn hex_escape(ascii_byte: u8, _minify: bool) -> String {
static HEX_DIGITS: &[u8; 16] = b"0123456789abcdef";

if ascii_byte > 0x0f {
let high = (ascii_byte >> 4) as usize;
let low = (ascii_byte & 0x0f) as usize;

if minify {
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[high], HEX_DIGITS[low]]) }
.to_string()
} else {
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[high], HEX_DIGITS[low], b' ']) }
.to_string()
}
} else if minify {
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[ascii_byte as usize]]) }.to_string()
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[high], HEX_DIGITS[low], b' ']) }
.to_string()
} else {
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[ascii_byte as usize], b' ']) }
.to_string()
Expand Down

1 comment on commit cc1d9bd

@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: cc1d9bd Previous: b887b30 Ratio
es/full/bugs-1 312287 ns/iter (± 22196) 307127 ns/iter (± 4863) 1.02
es/full/minify/libraries/antd 1749203954 ns/iter (± 62970471) 1754892688 ns/iter (± 35995839) 1.00
es/full/minify/libraries/d3 307596847 ns/iter (± 9819478) 316369815 ns/iter (± 11031774) 0.97
es/full/minify/libraries/echarts 1278107832 ns/iter (± 43228346) 1360138929 ns/iter (± 23464430) 0.94
es/full/minify/libraries/jquery 94922611 ns/iter (± 4094870) 95041531 ns/iter (± 3211884) 1.00
es/full/minify/libraries/lodash 107236007 ns/iter (± 2317536) 112230939 ns/iter (± 6239089) 0.96
es/full/minify/libraries/moment 53830172 ns/iter (± 1822581) 53964951 ns/iter (± 507202) 1.00
es/full/minify/libraries/react 19138460 ns/iter (± 276435) 19287207 ns/iter (± 194747) 0.99
es/full/minify/libraries/terser 243936500 ns/iter (± 9195511) 260613913 ns/iter (± 3568052) 0.94
es/full/minify/libraries/three 434515973 ns/iter (± 19268015) 463629165 ns/iter (± 10120828) 0.94
es/full/minify/libraries/typescript 3097431758 ns/iter (± 39524932) 3240399817 ns/iter (± 25696976) 0.96
es/full/minify/libraries/victory 653429490 ns/iter (± 25014363) 719130777 ns/iter (± 17646536) 0.91
es/full/minify/libraries/vue 130694829 ns/iter (± 3138700) 135171175 ns/iter (± 1189759) 0.97
es/full/codegen/es3 25428 ns/iter (± 201) 25984 ns/iter (± 52) 0.98
es/full/codegen/es5 25694 ns/iter (± 143) 26035 ns/iter (± 223) 0.99
es/full/codegen/es2015 25572 ns/iter (± 142) 25918 ns/iter (± 118) 0.99
es/full/codegen/es2016 25575 ns/iter (± 295) 25964 ns/iter (± 75) 0.99
es/full/codegen/es2017 25349 ns/iter (± 294) 26006 ns/iter (± 93) 0.97
es/full/codegen/es2018 25500 ns/iter (± 331) 25970 ns/iter (± 135) 0.98
es/full/codegen/es2019 25503 ns/iter (± 165) 25978 ns/iter (± 77) 0.98
es/full/codegen/es2020 24970 ns/iter (± 173) 25941 ns/iter (± 75) 0.96
es/full/all/es3 178993015 ns/iter (± 4163605) 173846039 ns/iter (± 2577477) 1.03
es/full/all/es5 169568498 ns/iter (± 3565982) 166814996 ns/iter (± 2213160) 1.02
es/full/all/es2015 128955554 ns/iter (± 4828148) 127776530 ns/iter (± 1460594) 1.01
es/full/all/es2016 125404677 ns/iter (± 7143095) 125573395 ns/iter (± 1793619) 1.00
es/full/all/es2017 122616202 ns/iter (± 1587489) 125000884 ns/iter (± 2021046) 0.98
es/full/all/es2018 124055034 ns/iter (± 2668700) 122355203 ns/iter (± 1678506) 1.01
es/full/all/es2019 121026696 ns/iter (± 3382127) 120337751 ns/iter (± 2284153) 1.01
es/full/all/es2020 116169999 ns/iter (± 1782452) 117526444 ns/iter (± 1791291) 0.99
es/full/parser 531368 ns/iter (± 14070) 540340 ns/iter (± 7976) 0.98
es/full/base/fixer 21706 ns/iter (± 229) 22038 ns/iter (± 63) 0.98
es/full/base/resolver_and_hygiene 80433 ns/iter (± 926) 81547 ns/iter (± 119) 0.99
serialization of ast node 122 ns/iter (± 1) 123 ns/iter (± 0) 0.99
serialization of serde 126 ns/iter (± 1) 127 ns/iter (± 0) 0.99
css/minify/libraries/bootstrap 27325840 ns/iter (± 463387) 27969839 ns/iter (± 695321) 0.98
css/visitor/compare/clone 2073094 ns/iter (± 30832) 2080373 ns/iter (± 17659) 1.00
css/visitor/compare/visit_mut_span 2205394 ns/iter (± 23547) 2240176 ns/iter (± 8975) 0.98
css/visitor/compare/visit_mut_span_panic 2284172 ns/iter (± 17689) 2290228 ns/iter (± 6828) 1.00
css/visitor/compare/fold_span 2961219 ns/iter (± 22776) 3046190 ns/iter (± 22450) 0.97
css/visitor/compare/fold_span_panic 3129301 ns/iter (± 50547) 3198891 ns/iter (± 33637) 0.98
css/lexer/bootstrap_5_1_3 5041506 ns/iter (± 62685) 5162542 ns/iter (± 2382) 0.98
css/lexer/foundation_6_7_4 4304723 ns/iter (± 38498) 4344010 ns/iter (± 1462) 0.99
css/lexer/tailwind_3_1_1 816039 ns/iter (± 9606) 826783 ns/iter (± 814) 0.99
css/parser/bootstrap_5_1_3 21378999 ns/iter (± 340223) 21716152 ns/iter (± 91362) 0.98
css/parser/foundation_6_7_4 17320253 ns/iter (± 67949) 17291897 ns/iter (± 62194) 1.00
css/parser/tailwind_3_1_1 3259706 ns/iter (± 16986) 3315462 ns/iter (± 8521) 0.98
es/codegen/colors 322873 ns/iter (± 185245) 328459 ns/iter (± 185340) 0.98
es/codegen/large 1221182 ns/iter (± 638983) 1220965 ns/iter (± 635200) 1.00
es/codegen/with-parser/colors 48776 ns/iter (± 329) 48986 ns/iter (± 762) 1.00
es/codegen/with-parser/large 526329 ns/iter (± 4613) 536278 ns/iter (± 1825) 0.98
es/minify/libraries/antd 1489785182 ns/iter (± 45502467) 1519176837 ns/iter (± 9465051) 0.98
es/minify/libraries/d3 254169325 ns/iter (± 12017501) 263413375 ns/iter (± 5721120) 0.96
es/minify/libraries/echarts 1106454659 ns/iter (± 52884229) 1171470887 ns/iter (± 20618887) 0.94
es/minify/libraries/jquery 78881365 ns/iter (± 2176210) 81047323 ns/iter (± 1268011) 0.97
es/minify/libraries/lodash 95118594 ns/iter (± 1878839) 98259893 ns/iter (± 2146656) 0.97
es/minify/libraries/moment 46143679 ns/iter (± 655228) 47830161 ns/iter (± 1099983) 0.96
es/minify/libraries/react 17423561 ns/iter (± 269906) 17452940 ns/iter (± 182373) 1.00
es/minify/libraries/terser 212659077 ns/iter (± 5040843) 219632573 ns/iter (± 3725735) 0.97
es/minify/libraries/three 372858944 ns/iter (± 17677851) 413815714 ns/iter (± 10849509) 0.90
es/minify/libraries/typescript 2673061979 ns/iter (± 40673055) 2781355614 ns/iter (± 33168974) 0.96
es/minify/libraries/victory 549941730 ns/iter (± 13502562) 583968744 ns/iter (± 11025935) 0.94
es/minify/libraries/vue 114444930 ns/iter (± 2168299) 117314801 ns/iter (± 945164) 0.98
es/visitor/compare/clone 2372278 ns/iter (± 18685) 2404819 ns/iter (± 25954) 0.99
es/visitor/compare/visit_mut_span 2684602 ns/iter (± 33816) 2772498 ns/iter (± 8760) 0.97
es/visitor/compare/visit_mut_span_panic 2757482 ns/iter (± 65672) 2817224 ns/iter (± 8645) 0.98
es/visitor/compare/fold_span 3800292 ns/iter (± 51271) 3951494 ns/iter (± 31882) 0.96
es/visitor/compare/fold_span_panic 4001957 ns/iter (± 25106) 4035051 ns/iter (± 9757) 0.99
es/lexer/colors 16977 ns/iter (± 185) 17234 ns/iter (± 54) 0.99
es/lexer/angular 8079094 ns/iter (± 48337) 8264280 ns/iter (± 9991) 0.98
es/lexer/backbone 1053947 ns/iter (± 12910) 1084318 ns/iter (± 4032) 0.97
es/lexer/jquery 5881650 ns/iter (± 80524) 5991757 ns/iter (± 20831) 0.98
es/lexer/jquery mobile 9197855 ns/iter (± 69154) 9245437 ns/iter (± 12538) 0.99
es/lexer/mootools 4716519 ns/iter (± 29848) 4692481 ns/iter (± 19893) 1.01
es/lexer/underscore 907674 ns/iter (± 2834) 902787 ns/iter (± 604) 1.01
es/lexer/three 28021810 ns/iter (± 336487) 28119095 ns/iter (± 18386) 1.00
es/lexer/yui 5085353 ns/iter (± 26605) 5063501 ns/iter (± 2824) 1.00
es/parser/colors 31120 ns/iter (± 606) 31696 ns/iter (± 57) 0.98
es/parser/angular 15968434 ns/iter (± 288306) 16962102 ns/iter (± 335313) 0.94
es/parser/backbone 2335047 ns/iter (± 17624) 2337451 ns/iter (± 8294) 1.00
es/parser/jquery 12786035 ns/iter (± 624260) 12780276 ns/iter (± 121783) 1.00
es/parser/jquery mobile 19058565 ns/iter (± 572771) 20547916 ns/iter (± 439863) 0.93
es/parser/mootools 9381871 ns/iter (± 146577) 9620561 ns/iter (± 56292) 0.98
es/parser/underscore 1942889 ns/iter (± 18967) 2002960 ns/iter (± 21996) 0.97
es/parser/three 56496381 ns/iter (± 1997326) 60672453 ns/iter (± 570792) 0.93
es/parser/yui 9484223 ns/iter (± 129201) 9743573 ns/iter (± 71587) 0.97
es/preset-env/usage/builtin_type 143026 ns/iter (± 32794) 144012 ns/iter (± 33221) 0.99
es/preset-env/usage/property 21430 ns/iter (± 253) 21551 ns/iter (± 133) 0.99
es/resolver/typescript 122071768 ns/iter (± 2462823) 126020158 ns/iter (± 4415813) 0.97
es/fixer/typescript 97581334 ns/iter (± 2171211) 96613581 ns/iter (± 1135470) 1.01
es/hygiene/typescript 198424238 ns/iter (± 4613501) 206011353 ns/iter (± 2112480) 0.96
es/resolver_with_hygiene/typescript 344252661 ns/iter (± 8933897) 358592319 ns/iter (± 2683941) 0.96
es/visitor/base-perf/module_clone 75592 ns/iter (± 1094) 76988 ns/iter (± 2385) 0.98
es/visitor/base-perf/fold_empty 84605 ns/iter (± 1111) 86316 ns/iter (± 1923) 0.98
es/visitor/base-perf/fold_noop_impl_all 84137 ns/iter (± 1823) 86150 ns/iter (± 1467) 0.98
es/visitor/base-perf/fold_noop_impl_vec 84063 ns/iter (± 1882) 86286 ns/iter (± 1370) 0.97
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 57 ns/iter (± 0) 0.96
es/visitor/base-perf/boxing_unboxed_clone 59 ns/iter (± 0) 59 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 104 ns/iter (± 0) 107 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_unboxed 100 ns/iter (± 1) 105 ns/iter (± 0) 0.95
es/visitor/base-perf/visit_contains_this 3496 ns/iter (± 78) 3540 ns/iter (± 49) 0.99
es/base/parallel/resolver/typescript 5319791705 ns/iter (± 558425717) 5765639456 ns/iter (± 739773207) 0.92
es/base/parallel/hygiene/typescript 2397702616 ns/iter (± 29412221) 2465841564 ns/iter (± 39797203) 0.97
misc/visitors/time-complexity/time 5 95 ns/iter (± 1) 96 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 338 ns/iter (± 8) 347 ns/iter (± 2) 0.97
misc/visitors/time-complexity/time 15 654 ns/iter (± 11) 657 ns/iter (± 1) 1.00
misc/visitors/time-complexity/time 20 1227 ns/iter (± 12) 1214 ns/iter (± 1) 1.01
misc/visitors/time-complexity/time 40 6084 ns/iter (± 49) 6212 ns/iter (± 32) 0.98
misc/visitors/time-complexity/time 60 15334 ns/iter (± 114) 15639 ns/iter (± 69) 0.98
es/full-target/es2016 186465 ns/iter (± 2547) 188031 ns/iter (± 603) 0.99
es/full-target/es2017 179973 ns/iter (± 1844) 184226 ns/iter (± 666) 0.98
es/full-target/es2018 168075 ns/iter (± 1935) 172755 ns/iter (± 444) 0.97
es2020_nullish_coalescing 65237 ns/iter (± 753) 67716 ns/iter (± 4941) 0.96
es2020_optional_chaining 95252 ns/iter (± 4350) 96702 ns/iter (± 8377) 0.99
es2022_class_properties 92085 ns/iter (± 965) 94788 ns/iter (± 303) 0.97
es2018_object_rest_spread 69073 ns/iter (± 911) 71935 ns/iter (± 219) 0.96
es2019_optional_catch_binding 59589 ns/iter (± 681) 61834 ns/iter (± 165) 0.96
es2017_async_to_generator 61329 ns/iter (± 536) 62489 ns/iter (± 121) 0.98
es2016_exponentiation 64695 ns/iter (± 516) 65947 ns/iter (± 208) 0.98
es2015_arrow 68627 ns/iter (± 927) 70834 ns/iter (± 409) 0.97
es2015_block_scoped_fn 64544 ns/iter (± 861) 67036 ns/iter (± 159) 0.96
es2015_block_scoping 148045 ns/iter (± 10091) 148008 ns/iter (± 9601) 1.00
es2015_classes 112585 ns/iter (± 935) 117144 ns/iter (± 591) 0.96
es2015_computed_props 61431 ns/iter (± 564) 61725 ns/iter (± 144) 1.00
es2015_destructuring 114111 ns/iter (± 1543) 117527 ns/iter (± 164) 0.97
es2015_duplicate_keys 61946 ns/iter (± 777) 63996 ns/iter (± 99) 0.97
es2015_parameters 78482 ns/iter (± 938) 79820 ns/iter (± 253) 0.98
es2015_fn_name 65744 ns/iter (± 415) 67344 ns/iter (± 501) 0.98
es2015_for_of 63435 ns/iter (± 829) 64810 ns/iter (± 208) 0.98
es2015_instanceof 62048 ns/iter (± 881) 63810 ns/iter (± 153) 0.97
es2015_shorthand_property 59785 ns/iter (± 800) 61283 ns/iter (± 116) 0.98
es2015_spread 59218 ns/iter (± 701) 61353 ns/iter (± 142) 0.97
es2015_sticky_regex 60319 ns/iter (± 704) 62673 ns/iter (± 76) 0.96
es2015_typeof_symbol 61106 ns/iter (± 658) 63022 ns/iter (± 128) 0.97
es/transform/baseline/base 49997 ns/iter (± 649) 52296 ns/iter (± 71) 0.96
es/transform/baseline/common_reserved_word 60641 ns/iter (± 727) 63229 ns/iter (± 175) 0.96
es/transform/baseline/common_typescript 143828 ns/iter (± 6452) 168372 ns/iter (± 3015) 0.85
es/target/es3 164841 ns/iter (± 1902) 170854 ns/iter (± 215) 0.96
es/target/es2015 616801 ns/iter (± 7271) 631290 ns/iter (± 1220) 0.98
es/target/es2016 63499 ns/iter (± 676) 66080 ns/iter (± 157) 0.96
es/target/es2017 61277 ns/iter (± 780) 62397 ns/iter (± 82) 0.98
es/target/es2018 80026 ns/iter (± 707) 81686 ns/iter (± 278) 0.98
es/target/es2020 130600 ns/iter (± 1505) 132768 ns/iter (± 301) 0.98
babelify-only 660520 ns/iter (± 4555) 669706 ns/iter (± 1670) 0.99
parse_and_babelify_angular 45057259 ns/iter (± 1822272) 46659677 ns/iter (± 683877) 0.97
parse_and_babelify_backbone 5467874 ns/iter (± 173182) 5563003 ns/iter (± 95191) 0.98
parse_and_babelify_jquery 32086131 ns/iter (± 1020124) 34720153 ns/iter (± 888871) 0.92
parse_and_babelify_jquery_mobile 56388284 ns/iter (± 2305643) 59048543 ns/iter (± 1354181) 0.95
parse_and_babelify_mootools 32920843 ns/iter (± 1271489) 35617144 ns/iter (± 668154) 0.92
parse_and_babelify_underscore 4504311 ns/iter (± 88542) 4396214 ns/iter (± 39376) 1.02
parse_and_babelify_yui 33619050 ns/iter (± 1476391) 35222016 ns/iter (± 387358) 0.95
html/minify/document/css_spec 40613197 ns/iter (± 621757) 43667130 ns/iter (± 445486) 0.93
html/minify/document/github 17130986 ns/iter (± 157198) 17929666 ns/iter (± 104171) 0.96
html/minify/document/stackoverflow 15427473 ns/iter (± 216490) 16053935 ns/iter (± 101778) 0.96
html/minify/document_fragment/css_spec 39014086 ns/iter (± 641243) 42158437 ns/iter (± 526341) 0.93
html/minify/document_fragment/github 16423018 ns/iter (± 138916) 17040979 ns/iter (± 92069) 0.96
html/minify/document_fragment/stackoverflow 15356481 ns/iter (± 141996) 15592014 ns/iter (± 53569) 0.98
html/document/visitor/compare/clone 340685 ns/iter (± 2357) 338643 ns/iter (± 1886) 1.01
html/document/visitor/compare/visit_mut_span 368219 ns/iter (± 2475) 372984 ns/iter (± 1106) 0.99
html/document/visitor/compare/visit_mut_span_panic 369828 ns/iter (± 5111) 382315 ns/iter (± 1954) 0.97
html/document/visitor/compare/fold_span 400818 ns/iter (± 5257) 413545 ns/iter (± 2594) 0.97
html/document/visitor/compare/fold_span_panic 461384 ns/iter (± 2283) 467696 ns/iter (± 1399) 0.99
html/document_fragment/visitor/compare/clone 335302 ns/iter (± 3672) 345575 ns/iter (± 2088) 0.97
html/document_fragment/visitor/compare/visit_mut_span 359494 ns/iter (± 4908) 369488 ns/iter (± 2586) 0.97
html/document_fragment/visitor/compare/visit_mut_span_panic 366594 ns/iter (± 4299) 373914 ns/iter (± 2485) 0.98
html/document_fragment/visitor/compare/fold_span 402130 ns/iter (± 4196) 405336 ns/iter (± 2428) 0.99
html/document_fragment/visitor/compare/fold_span_panic 459457 ns/iter (± 4625) 461367 ns/iter (± 2867) 1.00
html/lexer/css_2021_spec 15579411 ns/iter (± 118111) 15465805 ns/iter (± 16900) 1.01
html/lexer/github_com_17_05_2022 6008783 ns/iter (± 38404) 6015244 ns/iter (± 2323) 1.00
html/lexer/stackoverflow_com_17_05_2022 5554457 ns/iter (± 65281) 5626096 ns/iter (± 3201) 0.99
html/parser/parser_document/css_2021_spec 25143445 ns/iter (± 426763) 26580616 ns/iter (± 417674) 0.95
html/parser/parser_document/github_com_17_05_2022 8714031 ns/iter (± 95799) 8784962 ns/iter (± 9194) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7619497 ns/iter (± 80595) 7764510 ns/iter (± 8700) 0.98
html/parser/parser_document_fragment/css_2021_spec 25402491 ns/iter (± 473345) 27182513 ns/iter (± 302083) 0.93
html/parser/parser_document_fragment/github_com_17_05_2022 8695406 ns/iter (± 108693) 8801082 ns/iter (± 19129) 0.99
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7569064 ns/iter (± 107328) 7780492 ns/iter (± 49291) 0.97

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

Please sign in to comment.