Skip to content

Commit cc1d9bd

Browse files
authoredFeb 23, 2023
fix(css/utils): Fix minification of class names with whitespace (#6983)
1 parent c46c4f5 commit cc1d9bd

File tree

7 files changed

+12
-16
lines changed

7 files changed

+12
-16
lines changed
 

‎crates/swc_css_codegen/tests/fixture/packages/tailwindcss/variants/output.min.css

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc_css_codegen/tests/fixture/selectors/class/input.css

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
.\10FFFFabc:after { content: '\\10FFFFabc' }
33
.\10FFFF abc:after { content: '\\10FFFF abc' }
44
.\FEFF:after { content: '\uFEFF' }
5+
.\32 8f99 { color: red }

‎crates/swc_css_codegen/tests/fixture/selectors/class/output.css

+3
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@
1010
.:after {
1111
content: "uFEFF";
1212
}
13+
.\32 8f99 {
14+
color: red;
15+
}
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
.𐿿abc:after{content:"\\10FFF abc"}.􏿿abc:after{content:"\\10FFFFabc"}.􏿿abc:after{content:"\\10FFFF abc"}.:after{content:"uFEFF"}
1+
.𐿿abc:after{content:"\\10FFF abc"}.􏿿abc:after{content:"\\10FFFFabc"}.􏿿abc:after{content:"\\10FFFF abc"}.:after{content:"uFEFF"}.\32 8f99{color:red}

‎crates/swc_css_codegen/tests/fixture/style-blocks-contents/hacks/output.min.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc_css_codegen/tests/fixture/values/ident/output.min.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc_css_utils/src/lib.rs

+3-11
Original file line numberDiff line numberDiff line change
@@ -274,22 +274,14 @@ pub fn serialize_ident(value: &str, minify: bool) -> Cow<'_, str> {
274274
}
275275

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

280280
if ascii_byte > 0x0f {
281281
let high = (ascii_byte >> 4) as usize;
282282
let low = (ascii_byte & 0x0f) as usize;
283-
284-
if minify {
285-
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[high], HEX_DIGITS[low]]) }
286-
.to_string()
287-
} else {
288-
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[high], HEX_DIGITS[low], b' ']) }
289-
.to_string()
290-
}
291-
} else if minify {
292-
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[ascii_byte as usize]]) }.to_string()
283+
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[high], HEX_DIGITS[low], b' ']) }
284+
.to_string()
293285
} else {
294286
unsafe { str::from_utf8_unchecked(&[b'\\', HEX_DIGITS[ascii_byte as usize], b' ']) }
295287
.to_string()

1 commit comments

Comments
 (1)

github-actions[bot] commented on Feb 23, 2023

@github-actions[bot]

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.