Skip to content

Commit cfb7b51

Browse files
authoredJul 20, 2023
feat(css/parser): Support @starting-style (#7677)
1 parent c61dd52 commit cfb7b51

File tree

7 files changed

+853
-0
lines changed

7 files changed

+853
-0
lines changed
 

‎crates/swc_atoms/words.txt

+1
Original file line numberDiff line numberDiff line change
@@ -2213,6 +2213,7 @@ src
22132213
srcdoc
22142214
srcset
22152215
start
2216+
starting-style
22162217
startOffset
22172218
startoffset
22182219
static
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@starting-style {
2+
h1 {
3+
background-color: transparent;
4+
}
5+
@layer foo {
6+
div {
7+
height: 100px;
8+
}
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@starting-style{h1{background-color:transparent}@layer foo{div{height:100px}}}

‎crates/swc_css_parser/src/parser/at_rules/mod.rs

+18
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,17 @@ where
413413

414414
None
415415
}
416+
js_word!("starting-style") => {
417+
self.input.skip_ws();
418+
419+
if !is!(self, EOF) {
420+
let span = self.input.cur_span();
421+
422+
return Err(Error::new(span, ErrorKind::Expected("'{' token")));
423+
}
424+
425+
None
426+
}
416427
_ => {
417428
return Err(Error::new(Default::default(), ErrorKind::Ignore));
418429
}
@@ -738,6 +749,13 @@ where
738749

739750
declaration_list
740751
}
752+
js_word!("starting-style") => {
753+
let rule_list = self.parse_as::<Vec<Rule>>()?;
754+
let rule_list: Vec<ComponentValue> =
755+
rule_list.into_iter().map(ComponentValue::from).collect();
756+
757+
rule_list
758+
}
741759
_ => {
742760
return Err(Error::new(Default::default(), ErrorKind::Ignore));
743761
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
@starting-style {
2+
h1 {
3+
background-color: transparent;
4+
}
5+
@layer foo {
6+
div {
7+
height: 100px;
8+
}
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,353 @@
1+
{
2+
"type": "Stylesheet",
3+
"span": {
4+
"start": 1,
5+
"end": 148,
6+
"ctxt": 0
7+
},
8+
"rules": [
9+
{
10+
"type": "AtRule",
11+
"span": {
12+
"start": 1,
13+
"end": 148,
14+
"ctxt": 0
15+
},
16+
"name": {
17+
"type": "Ident",
18+
"span": {
19+
"start": 2,
20+
"end": 16,
21+
"ctxt": 0
22+
},
23+
"value": "starting-style",
24+
"raw": "starting-style"
25+
},
26+
"prelude": null,
27+
"block": {
28+
"type": "SimpleBlock",
29+
"span": {
30+
"start": 17,
31+
"end": 148,
32+
"ctxt": 0
33+
},
34+
"name": {
35+
"type": "PreservedToken",
36+
"span": {
37+
"start": 17,
38+
"end": 18,
39+
"ctxt": 0
40+
},
41+
"token": "LBrace"
42+
},
43+
"value": [
44+
{
45+
"type": "QualifiedRule",
46+
"span": {
47+
"start": 23,
48+
"end": 72,
49+
"ctxt": 0
50+
},
51+
"prelude": {
52+
"type": "SelectorList",
53+
"span": {
54+
"start": 23,
55+
"end": 25,
56+
"ctxt": 0
57+
},
58+
"children": [
59+
{
60+
"type": "ComplexSelector",
61+
"span": {
62+
"start": 23,
63+
"end": 25,
64+
"ctxt": 0
65+
},
66+
"children": [
67+
{
68+
"type": "CompoundSelector",
69+
"span": {
70+
"start": 23,
71+
"end": 25,
72+
"ctxt": 0
73+
},
74+
"nestingSelector": null,
75+
"typeSelector": {
76+
"type": "TagNameSelector",
77+
"span": {
78+
"start": 23,
79+
"end": 25,
80+
"ctxt": 0
81+
},
82+
"name": {
83+
"type": "WqName",
84+
"span": {
85+
"start": 23,
86+
"end": 25,
87+
"ctxt": 0
88+
},
89+
"prefix": null,
90+
"value": {
91+
"type": "Ident",
92+
"span": {
93+
"start": 23,
94+
"end": 25,
95+
"ctxt": 0
96+
},
97+
"value": "h1",
98+
"raw": "h1"
99+
}
100+
}
101+
},
102+
"subclassSelectors": []
103+
}
104+
]
105+
}
106+
]
107+
},
108+
"block": {
109+
"type": "SimpleBlock",
110+
"span": {
111+
"start": 26,
112+
"end": 72,
113+
"ctxt": 0
114+
},
115+
"name": {
116+
"type": "PreservedToken",
117+
"span": {
118+
"start": 26,
119+
"end": 27,
120+
"ctxt": 0
121+
},
122+
"token": "LBrace"
123+
},
124+
"value": [
125+
{
126+
"type": "Declaration",
127+
"span": {
128+
"start": 36,
129+
"end": 65,
130+
"ctxt": 0
131+
},
132+
"name": {
133+
"type": "Ident",
134+
"span": {
135+
"start": 36,
136+
"end": 52,
137+
"ctxt": 0
138+
},
139+
"value": "background-color",
140+
"raw": "background-color"
141+
},
142+
"value": [
143+
{
144+
"type": "Ident",
145+
"span": {
146+
"start": 54,
147+
"end": 65,
148+
"ctxt": 0
149+
},
150+
"value": "transparent",
151+
"raw": "transparent"
152+
}
153+
],
154+
"important": null
155+
}
156+
]
157+
}
158+
},
159+
{
160+
"type": "AtRule",
161+
"span": {
162+
"start": 77,
163+
"end": 146,
164+
"ctxt": 0
165+
},
166+
"name": {
167+
"type": "Ident",
168+
"span": {
169+
"start": 78,
170+
"end": 83,
171+
"ctxt": 0
172+
},
173+
"value": "layer",
174+
"raw": "layer"
175+
},
176+
"prelude": {
177+
"type": "LayerName",
178+
"span": {
179+
"start": 84,
180+
"end": 87,
181+
"ctxt": 0
182+
},
183+
"name": [
184+
{
185+
"type": "Ident",
186+
"span": {
187+
"start": 84,
188+
"end": 87,
189+
"ctxt": 0
190+
},
191+
"value": "foo",
192+
"raw": "foo"
193+
}
194+
]
195+
},
196+
"block": {
197+
"type": "SimpleBlock",
198+
"span": {
199+
"start": 88,
200+
"end": 146,
201+
"ctxt": 0
202+
},
203+
"name": {
204+
"type": "PreservedToken",
205+
"span": {
206+
"start": 88,
207+
"end": 89,
208+
"ctxt": 0
209+
},
210+
"token": "LBrace"
211+
},
212+
"value": [
213+
{
214+
"type": "QualifiedRule",
215+
"span": {
216+
"start": 98,
217+
"end": 140,
218+
"ctxt": 0
219+
},
220+
"prelude": {
221+
"type": "SelectorList",
222+
"span": {
223+
"start": 98,
224+
"end": 101,
225+
"ctxt": 0
226+
},
227+
"children": [
228+
{
229+
"type": "ComplexSelector",
230+
"span": {
231+
"start": 98,
232+
"end": 101,
233+
"ctxt": 0
234+
},
235+
"children": [
236+
{
237+
"type": "CompoundSelector",
238+
"span": {
239+
"start": 98,
240+
"end": 101,
241+
"ctxt": 0
242+
},
243+
"nestingSelector": null,
244+
"typeSelector": {
245+
"type": "TagNameSelector",
246+
"span": {
247+
"start": 98,
248+
"end": 101,
249+
"ctxt": 0
250+
},
251+
"name": {
252+
"type": "WqName",
253+
"span": {
254+
"start": 98,
255+
"end": 101,
256+
"ctxt": 0
257+
},
258+
"prefix": null,
259+
"value": {
260+
"type": "Ident",
261+
"span": {
262+
"start": 98,
263+
"end": 101,
264+
"ctxt": 0
265+
},
266+
"value": "div",
267+
"raw": "div"
268+
}
269+
}
270+
},
271+
"subclassSelectors": []
272+
}
273+
]
274+
}
275+
]
276+
},
277+
"block": {
278+
"type": "SimpleBlock",
279+
"span": {
280+
"start": 102,
281+
"end": 140,
282+
"ctxt": 0
283+
},
284+
"name": {
285+
"type": "PreservedToken",
286+
"span": {
287+
"start": 102,
288+
"end": 103,
289+
"ctxt": 0
290+
},
291+
"token": "LBrace"
292+
},
293+
"value": [
294+
{
295+
"type": "Declaration",
296+
"span": {
297+
"start": 116,
298+
"end": 129,
299+
"ctxt": 0
300+
},
301+
"name": {
302+
"type": "Ident",
303+
"span": {
304+
"start": 116,
305+
"end": 122,
306+
"ctxt": 0
307+
},
308+
"value": "height",
309+
"raw": "height"
310+
},
311+
"value": [
312+
{
313+
"type": "Length",
314+
"span": {
315+
"start": 124,
316+
"end": 129,
317+
"ctxt": 0
318+
},
319+
"value": {
320+
"type": "Number",
321+
"span": {
322+
"start": 124,
323+
"end": 127,
324+
"ctxt": 0
325+
},
326+
"value": 100.0,
327+
"raw": "100"
328+
},
329+
"unit": {
330+
"type": "Ident",
331+
"span": {
332+
"start": 127,
333+
"end": 129,
334+
"ctxt": 0
335+
},
336+
"value": "px",
337+
"raw": "px"
338+
}
339+
}
340+
],
341+
"important": null
342+
}
343+
]
344+
}
345+
}
346+
]
347+
}
348+
}
349+
]
350+
}
351+
}
352+
]
353+
}

‎crates/swc_css_parser/tests/fixture/at-rule/starting-style/span.swc-stderr

+460
Large diffs are not rendered by default.

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jul 20, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: cfb7b51 Previous: 9893bd2 Ratio
es/full/bugs-1 295932 ns/iter (± 6798) 282562 ns/iter (± 8571) 1.05
es/full/minify/libraries/antd 1301564837 ns/iter (± 35555424) 1311567857 ns/iter (± 14060782) 0.99
es/full/minify/libraries/d3 282772643 ns/iter (± 7392357) 279466498 ns/iter (± 4713009) 1.01
es/full/minify/libraries/echarts 1088087332 ns/iter (± 15891341) 1060415095 ns/iter (± 11723971) 1.03
es/full/minify/libraries/jquery 85826277 ns/iter (± 1356703) 85457549 ns/iter (± 277183) 1.00
es/full/minify/libraries/lodash 99722592 ns/iter (± 796098) 99144430 ns/iter (± 253060) 1.01
es/full/minify/libraries/moment 50242869 ns/iter (± 470282) 50068428 ns/iter (± 118820) 1.00
es/full/minify/libraries/react 18096705 ns/iter (± 51074) 18088115 ns/iter (± 219200) 1.00
es/full/minify/libraries/terser 218413307 ns/iter (± 820119) 223709682 ns/iter (± 2674946) 0.98
es/full/minify/libraries/three 381897870 ns/iter (± 3040161) 385385992 ns/iter (± 2636769) 0.99
es/full/minify/libraries/typescript 2666836629 ns/iter (± 19075023) 2646593756 ns/iter (± 12609079) 1.01
es/full/minify/libraries/victory 554532368 ns/iter (± 3409470) 557718948 ns/iter (± 4592059) 0.99
es/full/minify/libraries/vue 119864806 ns/iter (± 395297) 120517143 ns/iter (± 391068) 0.99
es/full/codegen/es3 33817 ns/iter (± 145) 34193 ns/iter (± 79) 0.99
es/full/codegen/es5 33801 ns/iter (± 157) 34271 ns/iter (± 68) 0.99
es/full/codegen/es2015 33890 ns/iter (± 110) 34209 ns/iter (± 51) 0.99
es/full/codegen/es2016 33937 ns/iter (± 113) 34233 ns/iter (± 89) 0.99
es/full/codegen/es2017 34070 ns/iter (± 161) 34184 ns/iter (± 99) 1.00
es/full/codegen/es2018 33857 ns/iter (± 146) 34200 ns/iter (± 86) 0.99
es/full/codegen/es2019 33873 ns/iter (± 145) 34236 ns/iter (± 89) 0.99
es/full/codegen/es2020 33944 ns/iter (± 156) 34276 ns/iter (± 62) 0.99
es/full/all/es3 172978993 ns/iter (± 837866) 173443920 ns/iter (± 875437) 1.00
es/full/all/es5 165318664 ns/iter (± 822826) 165949268 ns/iter (± 618715) 1.00
es/full/all/es2015 124817111 ns/iter (± 667778) 125217356 ns/iter (± 685180) 1.00
es/full/all/es2016 123281504 ns/iter (± 907584) 124100878 ns/iter (± 690187) 0.99
es/full/all/es2017 122569176 ns/iter (± 729127) 123762636 ns/iter (± 867461) 0.99
es/full/all/es2018 120811498 ns/iter (± 782893) 121907575 ns/iter (± 822109) 0.99
es/full/all/es2019 119619810 ns/iter (± 712528) 120477953 ns/iter (± 521984) 0.99
es/full/all/es2020 115338262 ns/iter (± 728595) 116321465 ns/iter (± 566233) 0.99
es/full/parser 531398 ns/iter (± 5317) 535292 ns/iter (± 6547) 0.99
es/full/base/fixer 20045 ns/iter (± 201) 19671 ns/iter (± 193) 1.02
es/full/base/resolver_and_hygiene 84506 ns/iter (± 240) 85403 ns/iter (± 195) 0.99
serialization of serde 302 ns/iter (± 0) 297 ns/iter (± 0) 1.02
css/minify/libraries/bootstrap 29393044 ns/iter (± 197650) 29450853 ns/iter (± 293183) 1.00
css/visitor/compare/clone 1667426 ns/iter (± 8551) 1712964 ns/iter (± 5514) 0.97
css/visitor/compare/visit_mut_span 1770897 ns/iter (± 7363) 1845178 ns/iter (± 7347) 0.96
css/visitor/compare/visit_mut_span_panic 1879008 ns/iter (± 9773) 1929647 ns/iter (± 11333) 0.97
css/visitor/compare/fold_span 2583650 ns/iter (± 19365) 2577912 ns/iter (± 15981) 1.00
css/visitor/compare/fold_span_panic 2745667 ns/iter (± 11838) 2762036 ns/iter (± 7186) 0.99
css/lexer/bootstrap_5_1_3 4403433 ns/iter (± 8155) 4648705 ns/iter (± 5983) 0.95
css/lexer/foundation_6_7_4 3697923 ns/iter (± 2050) 3920893 ns/iter (± 2237) 0.94
css/lexer/tailwind_3_1_1 706490 ns/iter (± 690) 746962 ns/iter (± 475) 0.95
css/parser/bootstrap_5_1_3 19345468 ns/iter (± 69058) 19148589 ns/iter (± 183229) 1.01
css/parser/foundation_6_7_4 15411558 ns/iter (± 79615) 15316124 ns/iter (± 27611) 1.01
css/parser/tailwind_3_1_1 2990400 ns/iter (± 4814) 2913435 ns/iter (± 1789) 1.03
es/codegen/colors 718937 ns/iter (± 393640) 733440 ns/iter (± 400781) 0.98
es/codegen/large 2890336 ns/iter (± 1546557) 2892828 ns/iter (± 1523784) 1.00
es/codegen/with-parser/colors 44958 ns/iter (± 543) 44390 ns/iter (± 489) 1.01
es/codegen/with-parser/large 486083 ns/iter (± 869) 489356 ns/iter (± 1004) 0.99
es/minify/libraries/antd 1148463490 ns/iter (± 16339552) 1191048973 ns/iter (± 25907467) 0.96
es/minify/libraries/d3 239390647 ns/iter (± 760714) 253950864 ns/iter (± 2733798) 0.94
es/minify/libraries/echarts 905536515 ns/iter (± 5427861) 942066026 ns/iter (± 25397536) 0.96
es/minify/libraries/jquery 73833313 ns/iter (± 196639) 74734139 ns/iter (± 622753) 0.99
es/minify/libraries/lodash 88335813 ns/iter (± 254425) 88751083 ns/iter (± 410413) 1.00
es/minify/libraries/moment 43514854 ns/iter (± 45420) 44056787 ns/iter (± 179257) 0.99
es/minify/libraries/react 16128248 ns/iter (± 100675) 16110327 ns/iter (± 56418) 1.00
es/minify/libraries/terser 187424614 ns/iter (± 706846) 188590373 ns/iter (± 995434) 0.99
es/minify/libraries/three 319867503 ns/iter (± 1065265) 321850788 ns/iter (± 6200601) 0.99
es/minify/libraries/typescript 2269629486 ns/iter (± 10947239) 2303840812 ns/iter (± 14029014) 0.99
es/minify/libraries/victory 468869012 ns/iter (± 3833002) 470896067 ns/iter (± 2118189) 1.00
es/minify/libraries/vue 106884395 ns/iter (± 345045) 107778331 ns/iter (± 359206) 0.99
es/visitor/compare/clone 1958301 ns/iter (± 7390) 1988596 ns/iter (± 5063) 0.98
es/visitor/compare/visit_mut_span 2286287 ns/iter (± 3336) 2320506 ns/iter (± 3757) 0.99
es/visitor/compare/visit_mut_span_panic 2326847 ns/iter (± 4667) 2374276 ns/iter (± 4902) 0.98
es/visitor/compare/fold_span 3346269 ns/iter (± 7533) 3431068 ns/iter (± 5499) 0.98
es/visitor/compare/fold_span_panic 3496479 ns/iter (± 5885) 3550606 ns/iter (± 6234) 0.98
es/lexer/colors 12507 ns/iter (± 28) 12830 ns/iter (± 45) 0.97
es/lexer/angular 6003190 ns/iter (± 8948) 6082089 ns/iter (± 14273) 0.99
es/lexer/backbone 780947 ns/iter (± 436) 811715 ns/iter (± 509) 0.96
es/lexer/jquery 4389655 ns/iter (± 3026) 4470623 ns/iter (± 1870) 0.98
es/lexer/jquery mobile 6722074 ns/iter (± 2707) 6851123 ns/iter (± 5587) 0.98
es/lexer/mootools 3482538 ns/iter (± 2263) 3567117 ns/iter (± 970) 0.98
es/lexer/underscore 660481 ns/iter (± 423) 671197 ns/iter (± 2523) 0.98
es/lexer/three 20685525 ns/iter (± 13950) 21191589 ns/iter (± 16844) 0.98
es/lexer/yui 3718524 ns/iter (± 3000) 3819344 ns/iter (± 2073) 0.97
es/parser/colors 26514 ns/iter (± 57) 26579 ns/iter (± 115) 1.00
es/parser/angular 13424762 ns/iter (± 60110) 13548160 ns/iter (± 73784) 0.99
es/parser/backbone 1999485 ns/iter (± 10012) 2014529 ns/iter (± 16756) 0.99
es/parser/jquery 10818966 ns/iter (± 99328) 11130746 ns/iter (± 273555) 0.97
es/parser/jquery mobile 16612090 ns/iter (± 206908) 16853269 ns/iter (± 305301) 0.99
es/parser/mootools 8296839 ns/iter (± 14751) 8434073 ns/iter (± 34171) 0.98
es/parser/underscore 1718859 ns/iter (± 8271) 1731804 ns/iter (± 12162) 0.99
es/parser/three 48394061 ns/iter (± 208006) 47062372 ns/iter (± 883192) 1.03
es/parser/yui 8211485 ns/iter (± 39546) 8458982 ns/iter (± 102144) 0.97
es/preset-env/usage/builtin_type 136993 ns/iter (± 33108) 140797 ns/iter (± 32848) 0.97
es/preset-env/usage/property 17038 ns/iter (± 53) 17337 ns/iter (± 82) 0.98
es/resolver/typescript 88561385 ns/iter (± 1326955) 89646556 ns/iter (± 792110) 0.99
es/fixer/typescript 63041631 ns/iter (± 510992) 63910581 ns/iter (± 1407895) 0.99
es/hygiene/typescript 132408110 ns/iter (± 1464565) 141563577 ns/iter (± 3380799) 0.94
es/resolver_with_hygiene/typescript 247619809 ns/iter (± 4222855) 254923448 ns/iter (± 5560414) 0.97
es/visitor/base-perf/module_clone 60839 ns/iter (± 198) 66772 ns/iter (± 254) 0.91
es/visitor/base-perf/fold_empty 64874 ns/iter (± 231) 69335 ns/iter (± 218) 0.94
es/visitor/base-perf/fold_noop_impl_all 64381 ns/iter (± 127) 69415 ns/iter (± 291) 0.93
es/visitor/base-perf/fold_noop_impl_vec 64113 ns/iter (± 329) 69595 ns/iter (± 604) 0.92
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 58 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 39 ns/iter (± 0) 1.03
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 106 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 76 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2563 ns/iter (± 26) 2511 ns/iter (± 11) 1.02
es/base/parallel/resolver/typescript 4553916385 ns/iter (± 282789671) 4298767888 ns/iter (± 271960910) 1.06
es/base/parallel/hygiene/typescript 1494436077 ns/iter (± 23213067) 1496829585 ns/iter (± 30879364) 1.00
misc/visitors/time-complexity/time 5 138 ns/iter (± 1) 136 ns/iter (± 2) 1.01
misc/visitors/time-complexity/time 10 394 ns/iter (± 3) 383 ns/iter (± 12) 1.03
misc/visitors/time-complexity/time 15 728 ns/iter (± 2) 679 ns/iter (± 5) 1.07
misc/visitors/time-complexity/time 20 915 ns/iter (± 67) 1066 ns/iter (± 6) 0.86
misc/visitors/time-complexity/time 40 3565 ns/iter (± 16) 3480 ns/iter (± 33) 1.02
misc/visitors/time-complexity/time 60 7220 ns/iter (± 14) 7251 ns/iter (± 15) 1.00
es/full-target/es2016 233009 ns/iter (± 733) 239617 ns/iter (± 1001) 0.97
es/full-target/es2017 221130 ns/iter (± 998) 227381 ns/iter (± 722) 0.97
es/full-target/es2018 209593 ns/iter (± 433) 216011 ns/iter (± 531) 0.97
es2020_nullish_coalescing 68034 ns/iter (± 320) 71437 ns/iter (± 432) 0.95
es2020_optional_chaining 78691 ns/iter (± 224) 81462 ns/iter (± 303) 0.97
es2022_class_properties 117361 ns/iter (± 368) 120193 ns/iter (± 520) 0.98
es2018_object_rest_spread 71936 ns/iter (± 114) 75172 ns/iter (± 371) 0.96
es2019_optional_catch_binding 61242 ns/iter (± 281) 63280 ns/iter (± 299) 0.97
es2017_async_to_generator 62244 ns/iter (± 121) 64568 ns/iter (± 162) 0.96
es2016_exponentiation 66186 ns/iter (± 363) 68636 ns/iter (± 190) 0.96
es2015_arrow 69505 ns/iter (± 157) 71420 ns/iter (± 294) 0.97
es2015_block_scoped_fn 66605 ns/iter (± 162) 69049 ns/iter (± 203) 0.96
es2015_block_scoping 120977 ns/iter (± 304) 124073 ns/iter (± 507) 0.98

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

Please sign in to comment.