Skip to content

Commit 0db25a2

Browse files
authoredSep 6, 2023
fix(css/modules): Aggregate class names when composes is chained. (#7917)
**Description:** aggregate class names when composes is chained. **Related issue:** - Closes #7737 - web-infra-dev/rspack#3875
1 parent 4623b3e commit 0db25a2

File tree

7 files changed

+141
-1
lines changed

7 files changed

+141
-1
lines changed
 

‎crates/swc_css_modules/src/lib.rs

+21-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,27 @@ where
218218
.cloned();
219219

220220
if let Some(key) = key {
221-
self.result.renamed.entry(key).or_default().extend(composes);
221+
let mut renamed = self.result.renamed.clone();
222+
let class_names = self.result.renamed.entry(key).or_default();
223+
224+
class_names.extend(composes.clone());
225+
226+
for composed_class_name in composes.iter() {
227+
if let CssClassName::Local { name } = composed_class_name {
228+
if let Some(original_class_name) =
229+
self.data.renamed_to_orig.get(&name.value)
230+
{
231+
class_names.extend(
232+
renamed
233+
.entry(original_class_name.clone())
234+
.or_default()
235+
.split_at(1)
236+
.1
237+
.to_vec(),
238+
);
239+
}
240+
}
241+
}
222242
}
223243
}
224244
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.__local__chain2 {}
2+
.__local__chain1 {}
3+
.__local__root-class {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
.chain2 {
2+
composes: e from global;
3+
composes: f from "./f.css";
4+
}
5+
6+
.chain1 {
7+
composes: chain2;
8+
composes: c from global;
9+
composes: d from "./d.css";
10+
}
11+
12+
.root-class {
13+
composes: chain1;
14+
composes: a from global;
15+
composes: b from "./b.css";
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[
2+
"./b.css",
3+
"./d.css",
4+
"./f.css"
5+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{
2+
"chain2": [
3+
{
4+
"type": "local",
5+
"name": "__local__chain2"
6+
},
7+
{
8+
"type": "global",
9+
"name": "e"
10+
},
11+
{
12+
"type": "import",
13+
"name": "f",
14+
"from": "./f.css"
15+
}
16+
],
17+
"chain1": [
18+
{
19+
"type": "local",
20+
"name": "__local__chain1"
21+
},
22+
{
23+
"type": "local",
24+
"name": "__local__chain2"
25+
},
26+
{
27+
"type": "global",
28+
"name": "c"
29+
},
30+
{
31+
"type": "import",
32+
"name": "d",
33+
"from": "./d.css"
34+
},
35+
{
36+
"type": "global",
37+
"name": "e"
38+
},
39+
{
40+
"type": "import",
41+
"name": "f",
42+
"from": "./f.css"
43+
}
44+
],
45+
"root-class": [
46+
{
47+
"type": "local",
48+
"name": "__local__root-class"
49+
},
50+
{
51+
"type": "local",
52+
"name": "__local__chain1"
53+
},
54+
{
55+
"type": "global",
56+
"name": "a"
57+
},
58+
{
59+
"type": "import",
60+
"name": "b",
61+
"from": "./b.css"
62+
},
63+
{
64+
"type": "local",
65+
"name": "__local__chain2"
66+
},
67+
{
68+
"type": "global",
69+
"name": "c"
70+
},
71+
{
72+
"type": "import",
73+
"name": "d",
74+
"from": "./d.css"
75+
},
76+
{
77+
"type": "global",
78+
"name": "e"
79+
},
80+
{
81+
"type": "import",
82+
"name": "f",
83+
"from": "./f.css"
84+
}
85+
]
86+
}

‎crates/swc_css_modules/tests/fixture/modules/tests-cases/composes-1/source.transform.json

+5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
{
1919
"type": "local",
2020
"name": "__local__c1"
21+
},
22+
{
23+
"type": "import",
24+
"name": "c2",
25+
"from": "./file.css"
2126
}
2227
],
2328
"c5": [

‎crates/swc_css_modules/tests/fixture/modules/tests-cases/composes-2/source.transform.json

+5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
{
1919
"type": "local",
2020
"name": "__local__c1"
21+
},
22+
{
23+
"type": "import",
24+
"name": "c-2",
25+
"from": "./file.css"
2126
}
2227
],
2328
"c5": [

1 commit comments

Comments
 (1)

github-actions[bot] commented on Sep 6, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 0db25a2 Previous: ee75756 Ratio
es/full/bugs-1 290433 ns/iter (± 13281) 285076 ns/iter (± 5626) 1.02
es/full/minify/libraries/antd 1329180516 ns/iter (± 18631869) 1316641651 ns/iter (± 10873867) 1.01
es/full/minify/libraries/d3 273115269 ns/iter (± 3284228) 277667143 ns/iter (± 4891363) 0.98
es/full/minify/libraries/echarts 1054533345 ns/iter (± 19835926) 1059806008 ns/iter (± 7580703) 1.00
es/full/minify/libraries/jquery 84160036 ns/iter (± 473019) 84604455 ns/iter (± 191505) 0.99
es/full/minify/libraries/lodash 97283284 ns/iter (± 371163) 97973419 ns/iter (± 260025) 0.99
es/full/minify/libraries/moment 49478523 ns/iter (± 234477) 50276488 ns/iter (± 144054) 0.98
es/full/minify/libraries/react 18107904 ns/iter (± 86036) 18081787 ns/iter (± 111610) 1.00
es/full/minify/libraries/terser 215200945 ns/iter (± 1095047) 219684119 ns/iter (± 4878331) 0.98
es/full/minify/libraries/three 382559202 ns/iter (± 3916009) 390758645 ns/iter (± 570717) 0.98
es/full/minify/libraries/typescript 2646509482 ns/iter (± 36322506) 2647775723 ns/iter (± 6066885) 1.00
es/full/minify/libraries/victory 559475084 ns/iter (± 6255747) 570363342 ns/iter (± 18833565) 0.98
es/full/minify/libraries/vue 118571681 ns/iter (± 549691) 120142817 ns/iter (± 365894) 0.99
es/full/codegen/es3 33957 ns/iter (± 193) 35341 ns/iter (± 305) 0.96
es/full/codegen/es5 33875 ns/iter (± 246) 35306 ns/iter (± 109) 0.96
es/full/codegen/es2015 33922 ns/iter (± 88) 35290 ns/iter (± 173) 0.96
es/full/codegen/es2016 33979 ns/iter (± 165) 35332 ns/iter (± 88) 0.96
es/full/codegen/es2017 33907 ns/iter (± 69) 35390 ns/iter (± 153) 0.96
es/full/codegen/es2018 33978 ns/iter (± 154) 35311 ns/iter (± 140) 0.96
es/full/codegen/es2019 34033 ns/iter (± 57) 35307 ns/iter (± 1263) 0.96
es/full/codegen/es2020 33939 ns/iter (± 120) 35345 ns/iter (± 145) 0.96
es/full/all/es3 170331235 ns/iter (± 1196070) 167948427 ns/iter (± 1256953) 1.01
es/full/all/es5 163756801 ns/iter (± 1849589) 159179256 ns/iter (± 1212654) 1.03
es/full/all/es2015 122582395 ns/iter (± 796387) 119570134 ns/iter (± 650928) 1.03
es/full/all/es2016 122082233 ns/iter (± 1175825) 118618211 ns/iter (± 1776547) 1.03
es/full/all/es2017 120751803 ns/iter (± 1147045) 118076678 ns/iter (± 1195831) 1.02
es/full/all/es2018 118793547 ns/iter (± 804320) 116282710 ns/iter (± 398683) 1.02
es/full/all/es2019 118950139 ns/iter (± 1251212) 115723186 ns/iter (± 914250) 1.03
es/full/all/es2020 113132152 ns/iter (± 877511) 110742209 ns/iter (± 630533) 1.02
es/full/parser 493513 ns/iter (± 6000) 481947 ns/iter (± 5517) 1.02
es/full/base/fixer 19028 ns/iter (± 144) 20267 ns/iter (± 122) 0.94
es/full/base/resolver_and_hygiene 81227 ns/iter (± 391) 80528 ns/iter (± 243) 1.01
serialization of serde 280 ns/iter (± 1) 292 ns/iter (± 12) 0.96
css/minify/libraries/bootstrap 28550938 ns/iter (± 335815) 28723807 ns/iter (± 133216) 0.99
css/visitor/compare/clone 1666053 ns/iter (± 5496) 1653759 ns/iter (± 7429) 1.01
css/visitor/compare/visit_mut_span 1795292 ns/iter (± 5420) 1809582 ns/iter (± 11624) 0.99
css/visitor/compare/visit_mut_span_panic 1865948 ns/iter (± 5494) 1845708 ns/iter (± 10546) 1.01
css/visitor/compare/fold_span 2579926 ns/iter (± 10894) 2585692 ns/iter (± 10045) 1.00
css/visitor/compare/fold_span_panic 2767827 ns/iter (± 8125) 2768838 ns/iter (± 8657) 1.00
css/lexer/bootstrap_5_1_3 4502524 ns/iter (± 4226) 4430242 ns/iter (± 5634) 1.02
css/lexer/foundation_6_7_4 3761133 ns/iter (± 6440) 3715592 ns/iter (± 3694) 1.01
css/lexer/tailwind_3_1_1 719744 ns/iter (± 1477) 704053 ns/iter (± 350) 1.02
css/parser/bootstrap_5_1_3 19366917 ns/iter (± 227025) 19227318 ns/iter (± 45456) 1.01
css/parser/foundation_6_7_4 15335995 ns/iter (± 28330) 15272215 ns/iter (± 13846) 1.00
css/parser/tailwind_3_1_1 2920080 ns/iter (± 15325) 2921846 ns/iter (± 2358) 1.00
es/codegen/colors 731855 ns/iter (± 398135) 759987 ns/iter (± 405308) 0.96
es/codegen/large 3063935 ns/iter (± 1620277) 2922074 ns/iter (± 1552590) 1.05
es/codegen/with-parser/colors 44606 ns/iter (± 562) 45551 ns/iter (± 563) 0.98
es/codegen/with-parser/large 489396 ns/iter (± 1039) 490319 ns/iter (± 1063) 1.00
es/minify/libraries/antd 1177889445 ns/iter (± 19411153) 1125094254 ns/iter (± 11360273) 1.05
es/minify/libraries/d3 242845531 ns/iter (± 669607) 237286026 ns/iter (± 545905) 1.02
es/minify/libraries/echarts 920883207 ns/iter (± 16828118) 894836750 ns/iter (± 4374688) 1.03
es/minify/libraries/jquery 75635847 ns/iter (± 783946) 72828247 ns/iter (± 261502) 1.04
es/minify/libraries/lodash 89104175 ns/iter (± 489069) 86473733 ns/iter (± 317735) 1.03
es/minify/libraries/moment 45192052 ns/iter (± 571488) 43253353 ns/iter (± 122155) 1.04
es/minify/libraries/react 16411022 ns/iter (± 100622) 15951546 ns/iter (± 142296) 1.03
es/minify/libraries/terser 190449129 ns/iter (± 1150391) 184104420 ns/iter (± 376468) 1.03
es/minify/libraries/three 324305963 ns/iter (± 1490128) 319776230 ns/iter (± 1529726) 1.01
es/minify/libraries/typescript 2304343786 ns/iter (± 56290371) 2217847912 ns/iter (± 36679658) 1.04
es/minify/libraries/victory 477721621 ns/iter (± 2276666) 474550920 ns/iter (± 1638077) 1.01
es/minify/libraries/vue 109328302 ns/iter (± 1073560) 105356335 ns/iter (± 213309) 1.04
es/visitor/compare/clone 1981275 ns/iter (± 1606) 1948253 ns/iter (± 17339) 1.02
es/visitor/compare/visit_mut_span 2316815 ns/iter (± 3595) 2287788 ns/iter (± 2998) 1.01
es/visitor/compare/visit_mut_span_panic 2354792 ns/iter (± 4989) 2332466 ns/iter (± 4525) 1.01
es/visitor/compare/fold_span 3473764 ns/iter (± 7627) 3324449 ns/iter (± 9372) 1.04
es/visitor/compare/fold_span_panic 3608813 ns/iter (± 12145) 3477111 ns/iter (± 8842) 1.04
es/lexer/colors 13276 ns/iter (± 77) 13042 ns/iter (± 28) 1.02
es/lexer/angular 6129151 ns/iter (± 2360) 6067538 ns/iter (± 22261) 1.01
es/lexer/backbone 794770 ns/iter (± 2517) 790676 ns/iter (± 772) 1.01
es/lexer/jquery 4543734 ns/iter (± 10772) 4472529 ns/iter (± 2915) 1.02
es/lexer/jquery mobile 6974746 ns/iter (± 31314) 6836822 ns/iter (± 6779) 1.02
es/lexer/mootools 3621360 ns/iter (± 2626) 3542721 ns/iter (± 2060) 1.02
es/lexer/underscore 660040 ns/iter (± 255) 659715 ns/iter (± 6622) 1.00
es/lexer/three 21538080 ns/iter (± 31176) 21508142 ns/iter (± 65890) 1.00
es/lexer/yui 3857361 ns/iter (± 6547) 3818682 ns/iter (± 18723) 1.01
es/parser/colors 26998 ns/iter (± 78) 26989 ns/iter (± 81) 1.00
es/parser/angular 13518412 ns/iter (± 89232) 13370769 ns/iter (± 167106) 1.01
es/parser/backbone 1987854 ns/iter (± 6999) 1991346 ns/iter (± 9196) 1.00
es/parser/jquery 10839002 ns/iter (± 44842) 10842820 ns/iter (± 36854) 1.00
es/parser/jquery mobile 16621310 ns/iter (± 38550) 16560542 ns/iter (± 150457) 1.00
es/parser/mootools 8366491 ns/iter (± 25245) 8366586 ns/iter (± 15429) 1.00
es/parser/underscore 1710814 ns/iter (± 9667) 1719445 ns/iter (± 18337) 0.99
es/parser/three 46470165 ns/iter (± 197349) 46683410 ns/iter (± 2608180) 1.00
es/parser/yui 8231755 ns/iter (± 46467) 8213079 ns/iter (± 29869) 1.00
es/preset-env/usage/builtin_type 136219 ns/iter (± 32200) 135327 ns/iter (± 32153) 1.01
es/preset-env/usage/property 16818 ns/iter (± 75) 16441 ns/iter (± 45) 1.02
es/resolver/typescript 89947237 ns/iter (± 1968502) 91099278 ns/iter (± 2298618) 0.99
es/fixer/typescript 63060744 ns/iter (± 1070425) 63663616 ns/iter (± 1018705) 0.99
es/hygiene/typescript 133925975 ns/iter (± 3492106) 131353704 ns/iter (± 858937) 1.02
es/resolver_with_hygiene/typescript 245109514 ns/iter (± 4376135) 246563752 ns/iter (± 2764870) 0.99
es/visitor/base-perf/module_clone 59501 ns/iter (± 372) 60041 ns/iter (± 249) 0.99
es/visitor/base-perf/fold_empty 63629 ns/iter (± 332) 64074 ns/iter (± 267) 0.99
es/visitor/base-perf/fold_noop_impl_all 63293 ns/iter (± 229) 64156 ns/iter (± 625) 0.99
es/visitor/base-perf/fold_noop_impl_vec 64041 ns/iter (± 319) 64951 ns/iter (± 257) 0.99
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 59 ns/iter (± 0) 0.95
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 38 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 110 ns/iter (± 0) 0.99
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 2523 ns/iter (± 12) 2488 ns/iter (± 15) 1.01
es/base/parallel/resolver/typescript 3618130616 ns/iter (± 266363016) 4537476671 ns/iter (± 261455986) 0.80
es/base/parallel/hygiene/typescript 1509793152 ns/iter (± 77207379) 1447571071 ns/iter (± 16861288) 1.04
misc/visitors/time-complexity/time 5 137 ns/iter (± 2) 132 ns/iter (± 2) 1.04
misc/visitors/time-complexity/time 10 273 ns/iter (± 37) 291 ns/iter (± 0) 0.94
misc/visitors/time-complexity/time 15 691 ns/iter (± 6) 692 ns/iter (± 3) 1.00
misc/visitors/time-complexity/time 20 913 ns/iter (± 10) 1036 ns/iter (± 24) 0.88
misc/visitors/time-complexity/time 40 3651 ns/iter (± 55) 3863 ns/iter (± 164) 0.95
misc/visitors/time-complexity/time 60 7719 ns/iter (± 44) 7338 ns/iter (± 36) 1.05
es/full-target/es2016 229957 ns/iter (± 870) 228443 ns/iter (± 1606) 1.01
es/full-target/es2017 221035 ns/iter (± 1255) 215505 ns/iter (± 2116) 1.03
es/full-target/es2018 208154 ns/iter (± 888) 205403 ns/iter (± 6353) 1.01
es2020_nullish_coalescing 72880 ns/iter (± 601) 70300 ns/iter (± 394) 1.04
es2020_optional_chaining 79698 ns/iter (± 426) 78784 ns/iter (± 278) 1.01
es2022_class_properties 116071 ns/iter (± 313) 114884 ns/iter (± 260) 1.01
es2018_object_rest_spread 75711 ns/iter (± 312) 75609 ns/iter (± 225) 1.00
es2019_optional_catch_binding 65645 ns/iter (± 394) 63865 ns/iter (± 205) 1.03
es2017_async_to_generator 66116 ns/iter (± 252) 64191 ns/iter (± 251) 1.03
es2016_exponentiation 67094 ns/iter (± 166) 67981 ns/iter (± 198) 0.99
es2015_arrow 73104 ns/iter (± 407) 71595 ns/iter (± 236) 1.02
es2015_block_scoped_fn 70166 ns/iter (± 236) 68648 ns/iter (± 144) 1.02
es2015_block_scoping 124123 ns/iter (± 968) 124024 ns/iter (± 720) 1.00

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

Please sign in to comment.