Skip to content

Commit

Permalink
fix(css/minifier): Fix minification of @supports at-rule (#6632)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Dec 13, 2022
1 parent 754c484 commit d3fbfff
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 8 deletions.
16 changes: 10 additions & 6 deletions crates/swc_css_minifier/src/compressor/mod.rs
Expand Up @@ -36,7 +36,7 @@ pub fn compressor() -> impl VisitMut {
struct Compressor {
ctx: Ctx,
need_utf8_at_rule: bool,
in_supports_conidition: bool,
in_supports_condition: bool,
}

impl Compressor {
Expand Down Expand Up @@ -99,7 +99,7 @@ impl VisitMut for Compressor {
}

fn visit_mut_declaration(&mut self, n: &mut Declaration) {
if self.in_supports_conidition {
if self.in_supports_condition {
n.visit_mut_children_with(self);

return;
Expand Down Expand Up @@ -183,13 +183,13 @@ impl VisitMut for Compressor {
}

fn visit_mut_supports_condition(&mut self, n: &mut SupportsCondition) {
let old_in_support_condition = self.in_supports_conidition;
let old_in_support_condition = self.in_supports_condition;

self.in_supports_conidition = true;
self.in_supports_condition = true;

n.visit_mut_children_with(self);

self.in_supports_conidition = old_in_support_condition;
self.in_supports_condition = old_in_support_condition;

self.compress_supports_condition(n);
}
Expand Down Expand Up @@ -221,14 +221,18 @@ impl VisitMut for Compressor {

// Don't touch `@supports`, it can be used to check a browser's support for one
// or more specific CSS features
if !self.in_supports_conidition {
if !self.in_supports_condition {
self.compress_calc_sum(n);
}
}

fn visit_mut_component_value(&mut self, n: &mut ComponentValue) {
n.visit_mut_children_with(self);

if self.in_supports_condition {
return;
}

self.compress_calc_sum_in_component_value(n);

self.compress_alpha_value_in_component_value(n);
Expand Down
Expand Up @@ -208,3 +208,10 @@
color: red;
}
}

@supports (animation: fade 3s cubic-bezier(0.25, 0.1, 0.25, 1)) {
a {
/* it is safe to compress inside block */
animation: fade 3s cubic-bezier(0.25, 0.1, 0.25, 1)
}
}

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

Expand Up @@ -27,3 +27,9 @@
background: red;
}
}

@supports (width: calc(100px)) {
div {
background: red;
}
}

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

1 comment on commit d3fbfff

@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: d3fbfff Previous: a5f7b4b Ratio
es/full/bugs-1 295158 ns/iter (± 16597) 296770 ns/iter (± 8893) 0.99
es/full/minify/libraries/antd 1657317663 ns/iter (± 22724123) 1769493389 ns/iter (± 32867930) 0.94
es/full/minify/libraries/d3 341011595 ns/iter (± 4281830) 348633613 ns/iter (± 7522665) 0.98
es/full/minify/libraries/echarts 1407984156 ns/iter (± 6870911) 1491180558 ns/iter (± 18659895) 0.94
es/full/minify/libraries/jquery 91794669 ns/iter (± 743830) 92163611 ns/iter (± 647813) 1.00
es/full/minify/libraries/lodash 111295857 ns/iter (± 783505) 110891861 ns/iter (± 1907971) 1.00
es/full/minify/libraries/moment 54172703 ns/iter (± 574353) 54636429 ns/iter (± 472180) 0.99
es/full/minify/libraries/react 19647067 ns/iter (± 131281) 19717949 ns/iter (± 243422) 1.00
es/full/minify/libraries/terser 262507498 ns/iter (± 1952909) 272295220 ns/iter (± 6732785) 0.96
es/full/minify/libraries/three 503863969 ns/iter (± 6007056) 501038117 ns/iter (± 10342569) 1.01
es/full/minify/libraries/typescript 3186366093 ns/iter (± 20959331) 3371090614 ns/iter (± 14694451) 0.95
es/full/minify/libraries/victory 709958852 ns/iter (± 10090662) 756348382 ns/iter (± 22967499) 0.94
es/full/minify/libraries/vue 137082098 ns/iter (± 1655969) 139338900 ns/iter (± 2566896) 0.98
es/full/codegen/es3 27861 ns/iter (± 67) 27731 ns/iter (± 43) 1.00
es/full/codegen/es5 27838 ns/iter (± 63) 27718 ns/iter (± 76) 1.00
es/full/codegen/es2015 27848 ns/iter (± 58) 27746 ns/iter (± 67) 1.00
es/full/codegen/es2016 27819 ns/iter (± 44) 27689 ns/iter (± 88) 1.00
es/full/codegen/es2017 27831 ns/iter (± 53) 27654 ns/iter (± 73) 1.01
es/full/codegen/es2018 27874 ns/iter (± 80) 27654 ns/iter (± 57) 1.01
es/full/codegen/es2019 27834 ns/iter (± 55) 27679 ns/iter (± 54) 1.01
es/full/codegen/es2020 27804 ns/iter (± 51) 27697 ns/iter (± 53) 1.00
es/full/all/es3 168052115 ns/iter (± 2763770) 169113246 ns/iter (± 2753658) 0.99
es/full/all/es5 159972182 ns/iter (± 1497603) 163787691 ns/iter (± 2044588) 0.98
es/full/all/es2015 120641921 ns/iter (± 1262253) 121785196 ns/iter (± 1553139) 0.99
es/full/all/es2016 119489924 ns/iter (± 895214) 120949053 ns/iter (± 1839472) 0.99
es/full/all/es2017 118496335 ns/iter (± 868721) 120012908 ns/iter (± 1283518) 0.99
es/full/all/es2018 116502309 ns/iter (± 946185) 118735458 ns/iter (± 1288693) 0.98
es/full/all/es2019 116073406 ns/iter (± 1091572) 117433949 ns/iter (± 1675653) 0.99
es/full/all/es2020 112012072 ns/iter (± 1045645) 112669110 ns/iter (± 992375) 0.99
es/full/parser 520989 ns/iter (± 6587) 524692 ns/iter (± 9411) 0.99
es/full/base/fixer 22004 ns/iter (± 26) 21989 ns/iter (± 43) 1.00
es/full/base/resolver_and_hygiene 78844 ns/iter (± 486) 78012 ns/iter (± 276) 1.01
serialization of ast node 121 ns/iter (± 0) 121 ns/iter (± 0) 1
serialization of serde 125 ns/iter (± 0) 125 ns/iter (± 0) 1
css/minify/libraries/bootstrap 27050361 ns/iter (± 219971) 27332423 ns/iter (± 142671) 0.99
css/visitor/compare/clone 2058202 ns/iter (± 22293) 2076110 ns/iter (± 13864) 0.99
css/visitor/compare/visit_mut_span 2253598 ns/iter (± 18706) 2265474 ns/iter (± 3769) 0.99
css/visitor/compare/visit_mut_span_panic 2288864 ns/iter (± 6217) 2320891 ns/iter (± 12781) 0.99
css/visitor/compare/fold_span 3000081 ns/iter (± 17399) 2968557 ns/iter (± 14678) 1.01
css/visitor/compare/fold_span_panic 3113108 ns/iter (± 16910) 3132601 ns/iter (± 26302) 0.99
css/lexer/bootstrap_5_1_3 5187977 ns/iter (± 1517) 5217247 ns/iter (± 6771) 0.99
css/lexer/foundation_6_7_4 4402964 ns/iter (± 4087) 4399462 ns/iter (± 4315) 1.00
css/lexer/tailwind_3_1_1 826628 ns/iter (± 415) 825587 ns/iter (± 738) 1.00
css/parser/bootstrap_5_1_3 20830959 ns/iter (± 74649) 20691717 ns/iter (± 92651) 1.01
css/parser/foundation_6_7_4 16585151 ns/iter (± 65422) 16503901 ns/iter (± 75957) 1.00
css/parser/tailwind_3_1_1 3219653 ns/iter (± 3887) 3186416 ns/iter (± 7432) 1.01
es/codegen/colors 331266 ns/iter (± 186531) 322071 ns/iter (± 181672) 1.03
es/codegen/large 1075628 ns/iter (± 550360) 1214203 ns/iter (± 650630) 0.89
es/codegen/with-parser/colors 46333 ns/iter (± 459) 46708 ns/iter (± 287) 0.99
es/codegen/with-parser/large 511798 ns/iter (± 656) 514686 ns/iter (± 1285) 0.99
es/minify/libraries/antd 1448109856 ns/iter (± 17898463) 1552122181 ns/iter (± 17461366) 0.93
es/minify/libraries/d3 298876933 ns/iter (± 5106427) 295349000 ns/iter (± 6804337) 1.01
es/minify/libraries/echarts 1222520789 ns/iter (± 9365098) 1304080994 ns/iter (± 21326201) 0.94
es/minify/libraries/jquery 78413478 ns/iter (± 666848) 79671717 ns/iter (± 859110) 0.98
es/minify/libraries/lodash 97382574 ns/iter (± 528676) 99647653 ns/iter (± 1617206) 0.98
es/minify/libraries/moment 45921637 ns/iter (± 190672) 47160661 ns/iter (± 628131) 0.97
es/minify/libraries/react 17244576 ns/iter (± 131688) 17537813 ns/iter (± 179437) 0.98
es/minify/libraries/terser 220151442 ns/iter (± 3179927) 231516997 ns/iter (± 5296672) 0.95
es/minify/libraries/three 392003164 ns/iter (± 7965818) 426852078 ns/iter (± 17683045) 0.92
es/minify/libraries/typescript 2667945053 ns/iter (± 9859656) 2916217052 ns/iter (± 18042167) 0.91
es/minify/libraries/victory 574631905 ns/iter (± 8557204) 637320892 ns/iter (± 17561772) 0.90
es/minify/libraries/vue 118218615 ns/iter (± 879471) 121421422 ns/iter (± 1335235) 0.97
es/visitor/compare/clone 2442994 ns/iter (± 6666) 2410822 ns/iter (± 10407) 1.01
es/visitor/compare/visit_mut_span 2796636 ns/iter (± 11616) 2800208 ns/iter (± 10802) 1.00
es/visitor/compare/visit_mut_span_panic 2848547 ns/iter (± 6808) 2848878 ns/iter (± 8774) 1.00
es/visitor/compare/fold_span 3948718 ns/iter (± 7483) 3959688 ns/iter (± 25081) 1.00
es/visitor/compare/fold_span_panic 4088416 ns/iter (± 15728) 4142506 ns/iter (± 19049) 0.99
es/lexer/colors 17568 ns/iter (± 14) 17264 ns/iter (± 32) 1.02
es/lexer/angular 8275747 ns/iter (± 3086) 8214758 ns/iter (± 23467) 1.01
es/lexer/backbone 1081500 ns/iter (± 817) 1070123 ns/iter (± 2843) 1.01
es/lexer/jquery 5973630 ns/iter (± 2471) 5940307 ns/iter (± 6348) 1.01
es/lexer/jquery mobile 9220729 ns/iter (± 5415) 9154217 ns/iter (± 6316) 1.01
es/lexer/mootools 4696013 ns/iter (± 2651) 4654164 ns/iter (± 6616) 1.01
es/lexer/underscore 899979 ns/iter (± 369) 892743 ns/iter (± 521) 1.01
es/lexer/three 28011804 ns/iter (± 19507) 27801144 ns/iter (± 76543) 1.01
es/lexer/yui 5079597 ns/iter (± 3599) 5043012 ns/iter (± 6206) 1.01
es/parser/colors 30574 ns/iter (± 147) 30651 ns/iter (± 147) 1.00
es/parser/angular 15507928 ns/iter (± 254857) 15789661 ns/iter (± 381800) 0.98
es/parser/backbone 2305407 ns/iter (± 11158) 2317995 ns/iter (± 10364) 0.99
es/parser/jquery 12518765 ns/iter (± 125536) 12621529 ns/iter (± 162228) 0.99
es/parser/jquery mobile 20516197 ns/iter (± 265117) 20260730 ns/iter (± 366628) 1.01
es/parser/mootools 9610213 ns/iter (± 46198) 9604879 ns/iter (± 34092) 1.00
es/parser/underscore 1959447 ns/iter (± 11511) 1959452 ns/iter (± 12610) 1.00
es/parser/three 59680370 ns/iter (± 254616) 60965085 ns/iter (± 646136) 0.98
es/parser/yui 9547901 ns/iter (± 72234) 9606784 ns/iter (± 82544) 0.99
es/preset-env/usage/builtin_type 141457 ns/iter (± 32118) 141204 ns/iter (± 31642) 1.00
es/preset-env/usage/property 21168 ns/iter (± 89) 21342 ns/iter (± 77) 0.99
es/resolver/typescript 109444785 ns/iter (± 2812212) 121504465 ns/iter (± 1077328) 0.90
es/fixer/typescript 87084757 ns/iter (± 1009739) 97103323 ns/iter (± 1140390) 0.90
es/hygiene/typescript 168537812 ns/iter (± 1511277) 192607321 ns/iter (± 1160254) 0.88
es/resolver_with_hygiene/typescript 296952808 ns/iter (± 878191) 327533969 ns/iter (± 2913489) 0.91
es/visitor/base-perf/module_clone 74004 ns/iter (± 936) 74071 ns/iter (± 1459) 1.00
es/visitor/base-perf/fold_empty 87964 ns/iter (± 1715) 85952 ns/iter (± 715) 1.02
es/visitor/base-perf/fold_noop_impl_all 86992 ns/iter (± 1697) 86761 ns/iter (± 1662) 1.00
es/visitor/base-perf/fold_noop_impl_vec 85782 ns/iter (± 1975) 88202 ns/iter (± 1543) 0.97
es/visitor/base-perf/boxing_boxed_clone 54 ns/iter (± 0) 54 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 61 ns/iter (± 0) 58 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_boxed 100 ns/iter (± 0) 99 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 100 ns/iter (± 0) 102 ns/iter (± 0) 0.98
es/visitor/base-perf/visit_contains_this 3400 ns/iter (± 36) 3541 ns/iter (± 58) 0.96
es/base/parallel/resolver/typescript 5543557325 ns/iter (± 284616248) 5469680780 ns/iter (± 253436070) 1.01
es/base/parallel/hygiene/typescript 2003911087 ns/iter (± 29615238) 2250782137 ns/iter (± 19078476) 0.89
misc/visitors/time-complexity/time 5 92 ns/iter (± 0) 93 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 299 ns/iter (± 3) 293 ns/iter (± 1) 1.02
misc/visitors/time-complexity/time 15 606 ns/iter (± 1) 601 ns/iter (± 1) 1.01
misc/visitors/time-complexity/time 20 1126 ns/iter (± 2) 1124 ns/iter (± 2) 1.00
misc/visitors/time-complexity/time 40 5933 ns/iter (± 34) 6105 ns/iter (± 169) 0.97
misc/visitors/time-complexity/time 60 15089 ns/iter (± 46) 15181 ns/iter (± 33) 0.99
es/full-target/es2016 187614 ns/iter (± 561) 187140 ns/iter (± 650) 1.00
es/full-target/es2017 181105 ns/iter (± 886) 181752 ns/iter (± 427) 1.00
es/full-target/es2018 170395 ns/iter (± 669) 170564 ns/iter (± 569) 1.00
es2020_nullish_coalescing 65393 ns/iter (± 268) 65935 ns/iter (± 8158) 0.99
es2020_optional_chaining 94378 ns/iter (± 322) 95327 ns/iter (± 6415) 0.99
es2022_class_properties 91745 ns/iter (± 377) 92912 ns/iter (± 176) 0.99
es2018_object_rest_spread 70174 ns/iter (± 1059) 71300 ns/iter (± 155) 0.98
es2019_optional_catch_binding 59862 ns/iter (± 173) 60593 ns/iter (± 93) 0.99
es2017_async_to_generator 60207 ns/iter (± 193) 60926 ns/iter (± 133) 0.99
es2016_exponentiation 63898 ns/iter (± 550) 64489 ns/iter (± 225) 0.99
es2015_arrow 68356 ns/iter (± 259) 69612 ns/iter (± 209) 0.98
es2015_block_scoped_fn 64714 ns/iter (± 191) 65431 ns/iter (± 210) 0.99
es2015_block_scoping 149903 ns/iter (± 8354) 137730 ns/iter (± 9048) 1.09
es2015_classes 113476 ns/iter (± 553) 116047 ns/iter (± 388) 0.98
es2015_computed_props 59481 ns/iter (± 187) 60156 ns/iter (± 139) 0.99
es2015_destructuring 114292 ns/iter (± 389) 115165 ns/iter (± 401) 0.99
es2015_duplicate_keys 62226 ns/iter (± 174) 63052 ns/iter (± 64) 0.99
es2015_parameters 77466 ns/iter (± 242) 78786 ns/iter (± 192) 0.98
es2015_fn_name 65106 ns/iter (± 434) 65941 ns/iter (± 445) 0.99
es2015_for_of 62626 ns/iter (± 286) 63350 ns/iter (± 171) 0.99
es2015_instanceof 61719 ns/iter (± 141) 62337 ns/iter (± 103) 0.99
es2015_shorthand_property 59778 ns/iter (± 95) 60315 ns/iter (± 203) 0.99
es2015_spread 59774 ns/iter (± 79) 60143 ns/iter (± 201) 0.99
es2015_sticky_regex 60923 ns/iter (± 97) 61378 ns/iter (± 98) 0.99
es2015_typeof_symbol 61266 ns/iter (± 110) 61694 ns/iter (± 231) 0.99
es/transform/baseline/base 50644 ns/iter (± 72) 51156 ns/iter (± 114) 0.99
es/transform/baseline/common_reserved_word 61511 ns/iter (± 80) 61806 ns/iter (± 154) 1.00
es/transform/baseline/common_typescript 150271 ns/iter (± 12076) 143660 ns/iter (± 8027) 1.05
es/target/es3 168327 ns/iter (± 582) 169396 ns/iter (± 538) 0.99
es/target/es2015 628413 ns/iter (± 1380) 629267 ns/iter (± 955) 1.00
es/target/es2016 63973 ns/iter (± 97) 64204 ns/iter (± 177) 1.00
es/target/es2017 60704 ns/iter (± 191) 60911 ns/iter (± 135) 1.00
es/target/es2018 80467 ns/iter (± 144) 80993 ns/iter (± 310) 0.99
es/target/es2020 130699 ns/iter (± 437) 132001 ns/iter (± 221) 0.99
babelify-only 654476 ns/iter (± 2308) 659800 ns/iter (± 1548) 0.99
parse_and_babelify_angular 41745378 ns/iter (± 351959) 43855584 ns/iter (± 746964) 0.95
parse_and_babelify_backbone 5273105 ns/iter (± 91552) 5433238 ns/iter (± 73024) 0.97
parse_and_babelify_jquery 31591608 ns/iter (± 164197) 33612770 ns/iter (± 420612) 0.94
parse_and_babelify_jquery_mobile 53990560 ns/iter (± 563011) 57915026 ns/iter (± 1971139) 0.93
parse_and_babelify_mootools 32379824 ns/iter (± 471134) 35259234 ns/iter (± 629242) 0.92
parse_and_babelify_underscore 4291430 ns/iter (± 30684) 4360593 ns/iter (± 43712) 0.98
parse_and_babelify_yui 32691833 ns/iter (± 284476) 34670273 ns/iter (± 702765) 0.94
html/minify/document/css_spec 42141532 ns/iter (± 375192) 42411063 ns/iter (± 549039) 0.99
html/minify/document/github 17458912 ns/iter (± 133305) 17427703 ns/iter (± 163050) 1.00
html/minify/document/stackoverflow 15649741 ns/iter (± 37024) 15565424 ns/iter (± 40957) 1.01
html/minify/document_fragment/css_spec 40501560 ns/iter (± 515706) 40211651 ns/iter (± 602968) 1.01
html/minify/document_fragment/github 16641375 ns/iter (± 65743) 16623816 ns/iter (± 68755) 1.00
html/minify/document_fragment/stackoverflow 15120650 ns/iter (± 24045) 15024254 ns/iter (± 106062) 1.01
html/document/visitor/compare/clone 336089 ns/iter (± 2702) 336975 ns/iter (± 2054) 1.00
html/document/visitor/compare/visit_mut_span 366296 ns/iter (± 2717) 363882 ns/iter (± 2499) 1.01
html/document/visitor/compare/visit_mut_span_panic 375608 ns/iter (± 2220) 379523 ns/iter (± 2101) 0.99
html/document/visitor/compare/fold_span 399549 ns/iter (± 2329) 407010 ns/iter (± 2656) 0.98
html/document/visitor/compare/fold_span_panic 461965 ns/iter (± 27378) 467155 ns/iter (± 2456) 0.99
html/document_fragment/visitor/compare/clone 338579 ns/iter (± 1760) 338822 ns/iter (± 1700) 1.00
html/document_fragment/visitor/compare/visit_mut_span 364392 ns/iter (± 2038) 363165 ns/iter (± 2021) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 371022 ns/iter (± 3113) 369006 ns/iter (± 2211) 1.01
html/document_fragment/visitor/compare/fold_span 404060 ns/iter (± 1994) 400490 ns/iter (± 2198) 1.01
html/document_fragment/visitor/compare/fold_span_panic 460841 ns/iter (± 2806) 464116 ns/iter (± 1357) 0.99
html/lexer/css_2021_spec 15614469 ns/iter (± 8284) 15658685 ns/iter (± 34112) 1.00
html/lexer/github_com_17_05_2022 6052616 ns/iter (± 1437) 6069639 ns/iter (± 24942) 1.00
html/lexer/stackoverflow_com_17_05_2022 5656080 ns/iter (± 2379) 5691382 ns/iter (± 9721) 0.99
html/parser/parser_document/css_2021_spec 26880726 ns/iter (± 287310) 25973672 ns/iter (± 385362) 1.03
html/parser/parser_document/github_com_17_05_2022 8757394 ns/iter (± 13753) 8742091 ns/iter (± 19242) 1.00
html/parser/parser_document/stackoverflow_com_17_05_2022 7759299 ns/iter (± 43442) 7701199 ns/iter (± 18278) 1.01
html/parser/parser_document_fragment/css_2021_spec 26139262 ns/iter (± 161848) 25942828 ns/iter (± 351304) 1.01
html/parser/parser_document_fragment/github_com_17_05_2022 8819209 ns/iter (± 25266) 8744842 ns/iter (± 19463) 1.01
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7699188 ns/iter (± 17528) 7698011 ns/iter (± 23174) 1.00

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

Please sign in to comment.