1use crate::pos::Span;
4use oxc_css_parser_macro::{EnumAsIs, SpanIgnoredEq, Spanned};
5#[cfg(feature = "serialize")]
6use serde::Serialize;
7
8#[derive(Clone, Debug, Spanned, PartialEq, SpanIgnoredEq)]
9#[cfg_attr(feature = "serialize", derive(Serialize))]
10#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
11pub struct Comment<'s> {
12 pub content: &'s str,
13 pub kind: CommentKind,
14 pub span: Span,
15}
16
17#[derive(Clone, Debug, Spanned, PartialEq, SpanIgnoredEq, EnumAsIs)]
18#[cfg_attr(feature = "serialize", derive(Serialize))]
19pub enum CommentKind {
20 Block,
21 Line,
22}
23
24#[derive(Clone, Debug, PartialEq, EnumAsIs)]
25#[cfg_attr(feature = "serialize", derive(Serialize))]
26pub enum Token<'s> {
27 Eof(Eof),
28 Ampersand(Ampersand),
29 Asterisk(Asterisk),
30 AsteriskEqual(AsteriskEqual),
31 At(At),
32 AtKeyword(AtKeyword<'s>),
33 AtLBraceVar(AtLBraceVar<'s>),
34 BacktickCode(BacktickCode<'s>),
35 Bar(Bar),
36 BarBar(BarBar),
37 BarEqual(BarEqual),
38 CaretEqual(CaretEqual),
39 Cdc(Cdc),
40 Cdo(Cdo),
41 Colon(Colon),
42 ColonColon(ColonColon),
43 Comma(Comma),
44 Dedent(Dedent),
45 Dimension(Dimension<'s>),
46 DollarEqual(DollarEqual),
47 DollarLBraceVar(DollarLBraceVar<'s>),
48 DollarVar(DollarVar<'s>),
49 Dot(Dot),
50 DotDotDot(DotDotDot),
51 Equal(Equal),
52 EqualEqual(EqualEqual),
53 Exclamation(Exclamation),
54 ExclamationEqual(ExclamationEqual),
55 GreaterThan(GreaterThan),
56 GreaterThanEqual(GreaterThanEqual),
57 Hash(Hash<'s>),
58 HashLBrace(HashLBrace),
59 Ident(Ident<'s>),
60 Indent(Indent),
61 LBrace(LBrace),
62 LBracket(LBracket),
63 LessThan(LessThan),
64 LessThanEqual(LessThanEqual),
65 Linebreak(Linebreak),
66 LParen(LParen),
67 Minus(Minus),
68 Number(Number<'s>),
69 NumberSign(NumberSign),
70 Percent(Percent),
71 Percentage(Percentage<'s>),
72 Placeholder(Placeholder<'s>),
73 Plus(Plus),
74 PlusUnderscore(PlusUnderscore),
75 Question(Question),
76 RBrace(RBrace),
77 RBracket(RBracket),
78 RParen(RParen),
79 Semicolon(Semicolon),
80 Solidus(Solidus),
81 Str(Str<'s>),
82 StrTemplate(StrTemplate<'s>),
83 Tilde(Tilde),
84 TildeEqual(TildeEqual),
85 UrlRaw(UrlRaw<'s>),
86 UrlTemplate(UrlTemplate<'s>),
87}
88
89#[derive(Clone, Debug, Spanned, PartialEq)]
90#[cfg_attr(feature = "serialize", derive(Serialize))]
91#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
92pub struct TokenWithSpan<'s> {
93 pub token: Token<'s>,
94 pub span: Span,
95}
96
97#[derive(Clone, Debug, PartialEq)]
98#[cfg_attr(feature = "serialize", derive(Serialize))]
99#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
100pub struct Ampersand {}
101
102#[derive(Clone, Debug, PartialEq)]
103#[cfg_attr(feature = "serialize", derive(Serialize))]
104#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
105pub struct Asterisk {}
106
107#[derive(Clone, Debug, PartialEq)]
108#[cfg_attr(feature = "serialize", derive(Serialize))]
109#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
110pub struct AsteriskEqual {}
111
112#[derive(Clone, Debug, PartialEq)]
113#[cfg_attr(feature = "serialize", derive(Serialize))]
114#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
115pub struct At {}
116
117#[derive(Clone, Debug, PartialEq)]
118#[cfg_attr(feature = "serialize", derive(Serialize))]
119#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
120pub struct AtKeyword<'s> {
121 pub ident: Ident<'s>,
122}
123
124#[derive(Clone, Copy, Debug, PartialEq, Eq)]
128#[cfg_attr(feature = "serialize", derive(Serialize))]
129#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
130pub struct Placeholder<'s> {
131 pub index: u32,
132 pub suffix: &'s str,
136}
137
138#[derive(Clone, Debug, PartialEq)]
139#[cfg_attr(feature = "serialize", derive(Serialize))]
140#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
141pub struct AtLBraceVar<'s> {
142 pub ident: Ident<'s>,
143}
144
145#[derive(Clone, Debug, PartialEq)]
146#[cfg_attr(feature = "serialize", derive(Serialize))]
147#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
148pub struct BacktickCode<'s> {
149 pub raw: &'s str,
150}
151
152#[derive(Clone, Debug, PartialEq)]
153#[cfg_attr(feature = "serialize", derive(Serialize))]
154#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
155pub struct Bar {}
156
157#[derive(Clone, Debug, PartialEq)]
158#[cfg_attr(feature = "serialize", derive(Serialize))]
159#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
160pub struct BarBar {}
161
162#[derive(Clone, Debug, PartialEq)]
163#[cfg_attr(feature = "serialize", derive(Serialize))]
164#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
165pub struct BarEqual {}
166
167#[derive(Clone, Debug, PartialEq)]
168#[cfg_attr(feature = "serialize", derive(Serialize))]
169#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
170pub struct CaretEqual {}
171
172#[derive(Clone, Debug, PartialEq)]
174#[cfg_attr(feature = "serialize", derive(Serialize))]
175#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
176pub struct Cdc {}
177
178#[derive(Clone, Debug, PartialEq)]
180#[cfg_attr(feature = "serialize", derive(Serialize))]
181#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
182pub struct Cdo {}
183
184#[derive(Clone, Debug, PartialEq)]
185#[cfg_attr(feature = "serialize", derive(Serialize))]
186#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
187pub struct Colon {}
188
189#[derive(Clone, Debug, PartialEq)]
190#[cfg_attr(feature = "serialize", derive(Serialize))]
191#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
192pub struct ColonColon {}
193
194#[derive(Clone, Debug, PartialEq)]
195#[cfg_attr(feature = "serialize", derive(Serialize))]
196#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
197pub struct Comma {}
198
199#[derive(Clone, Debug, PartialEq)]
200#[cfg_attr(feature = "serialize", derive(Serialize))]
201#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
202pub struct Dedent {}
203
204#[derive(Clone, Debug, PartialEq)]
205#[cfg_attr(feature = "serialize", derive(Serialize))]
206#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
207pub struct Dimension<'s> {
208 pub value: Number<'s>,
209 pub unit: Ident<'s>,
210}
211
212#[derive(Clone, Debug, PartialEq)]
213#[cfg_attr(feature = "serialize", derive(Serialize))]
214#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
215pub struct DollarEqual {}
216
217#[derive(Clone, Debug, PartialEq)]
218#[cfg_attr(feature = "serialize", derive(Serialize))]
219#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
220pub struct DollarLBraceVar<'s> {
221 pub ident: Ident<'s>,
222}
223
224#[derive(Clone, Debug, PartialEq)]
225#[cfg_attr(feature = "serialize", derive(Serialize))]
226#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
227pub struct DollarVar<'s> {
228 pub ident: Ident<'s>,
229}
230
231#[derive(Clone, Debug, PartialEq)]
232#[cfg_attr(feature = "serialize", derive(Serialize))]
233#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
234pub struct Dot {}
235
236#[derive(Clone, Debug, PartialEq)]
237#[cfg_attr(feature = "serialize", derive(Serialize))]
238#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
239pub struct DotDotDot {}
240
241#[derive(Clone, Debug, PartialEq)]
242#[cfg_attr(feature = "serialize", derive(Serialize))]
243#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
244pub struct Eof {}
245
246#[derive(Clone, Debug, PartialEq)]
247#[cfg_attr(feature = "serialize", derive(Serialize))]
248#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
249pub struct Equal {}
250
251#[derive(Clone, Debug, PartialEq)]
252#[cfg_attr(feature = "serialize", derive(Serialize))]
253#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
254pub struct EqualEqual {}
255
256#[derive(Clone, Debug, PartialEq)]
257#[cfg_attr(feature = "serialize", derive(Serialize))]
258#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
259pub struct Exclamation {}
260
261#[derive(Clone, Debug, PartialEq)]
262#[cfg_attr(feature = "serialize", derive(Serialize))]
263#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
264pub struct ExclamationEqual {}
265
266#[derive(Clone, Debug, PartialEq)]
267#[cfg_attr(feature = "serialize", derive(Serialize))]
268#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
269pub struct GreaterThan {}
270
271#[derive(Clone, Debug, PartialEq)]
272#[cfg_attr(feature = "serialize", derive(Serialize))]
273#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
274pub struct GreaterThanEqual {}
275
276#[derive(Clone, Debug, PartialEq)]
277#[cfg_attr(feature = "serialize", derive(Serialize))]
278#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
279pub struct Hash<'s> {
280 pub raw: &'s str,
282 pub escaped: bool,
283}
284
285#[derive(Clone, Debug, PartialEq)]
286#[cfg_attr(feature = "serialize", derive(Serialize))]
287#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
288pub struct HashLBrace {}
289
290#[derive(Clone, Debug, PartialEq)]
291#[cfg_attr(feature = "serialize", derive(Serialize))]
292#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
293pub struct Ident<'s> {
294 pub escaped: bool,
295 pub raw: &'s str,
296}
297
298#[derive(Clone, Debug, PartialEq)]
299#[cfg_attr(feature = "serialize", derive(Serialize))]
300#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
301pub struct Indent {}
302
303#[derive(Clone, Debug, PartialEq)]
304#[cfg_attr(feature = "serialize", derive(Serialize))]
305#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
306pub struct LBrace {}
307
308#[derive(Clone, Debug, PartialEq)]
309#[cfg_attr(feature = "serialize", derive(Serialize))]
310#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
311pub struct LBracket {}
312
313#[derive(Clone, Debug, PartialEq)]
314#[cfg_attr(feature = "serialize", derive(Serialize))]
315#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
316pub struct LessThan {}
317
318#[derive(Clone, Debug, PartialEq)]
319#[cfg_attr(feature = "serialize", derive(Serialize))]
320#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
321pub struct LessThanEqual {}
322
323#[derive(Clone, Debug, PartialEq)]
324#[cfg_attr(feature = "serialize", derive(Serialize))]
325#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
326pub struct Linebreak {}
327
328#[derive(Clone, Debug, PartialEq)]
329#[cfg_attr(feature = "serialize", derive(Serialize))]
330#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
331pub struct LParen {}
332
333#[derive(Clone, Debug, PartialEq)]
334#[cfg_attr(feature = "serialize", derive(Serialize))]
335#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
336pub struct Minus {}
337
338#[derive(Clone, Debug, PartialEq)]
339#[cfg_attr(feature = "serialize", derive(Serialize))]
340#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
341pub struct Number<'s> {
342 pub raw: &'s str,
343}
344
345#[derive(Clone, Debug, PartialEq)]
347#[cfg_attr(feature = "serialize", derive(Serialize))]
348#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
349pub struct NumberSign {}
350
351#[derive(Clone, Debug, PartialEq)]
352#[cfg_attr(feature = "serialize", derive(Serialize))]
353#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
354pub struct Percent {}
355
356#[derive(Clone, Debug, PartialEq)]
357#[cfg_attr(feature = "serialize", derive(Serialize))]
358#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
359pub struct Percentage<'s> {
360 pub value: Number<'s>,
361}
362
363#[derive(Clone, Debug, PartialEq)]
364#[cfg_attr(feature = "serialize", derive(Serialize))]
365#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
366pub struct Plus {}
367
368#[derive(Clone, Debug, PartialEq)]
369#[cfg_attr(feature = "serialize", derive(Serialize))]
370#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
371pub struct PlusUnderscore {}
372
373#[derive(Clone, Debug, PartialEq)]
374#[cfg_attr(feature = "serialize", derive(Serialize))]
375#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
376pub struct Question {}
377
378#[derive(Clone, Debug, PartialEq)]
379#[cfg_attr(feature = "serialize", derive(Serialize))]
380#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
381pub struct RBrace {}
382
383#[derive(Clone, Debug, PartialEq)]
384#[cfg_attr(feature = "serialize", derive(Serialize))]
385#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
386pub struct RBracket {}
387
388#[derive(Clone, Debug, PartialEq)]
389#[cfg_attr(feature = "serialize", derive(Serialize))]
390#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
391pub struct RParen {}
392
393#[derive(Clone, Debug, PartialEq)]
394#[cfg_attr(feature = "serialize", derive(Serialize))]
395#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
396pub struct Semicolon {}
397
398#[derive(Clone, Debug, PartialEq)]
399#[cfg_attr(feature = "serialize", derive(Serialize))]
400#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
401pub struct Solidus {}
402
403#[derive(Clone, Debug, PartialEq)]
404#[cfg_attr(feature = "serialize", derive(Serialize))]
405#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
406pub struct Str<'s> {
407 pub raw: &'s str,
408 pub escaped: bool,
409}
410
411#[derive(Clone, Debug, PartialEq)]
412#[cfg_attr(feature = "serialize", derive(Serialize))]
413#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
414pub struct StrTemplate<'s> {
415 pub raw: &'s str,
416 pub escaped: bool,
417 pub head: bool,
418 pub tail: bool,
419}
420
421#[derive(Clone, Debug, PartialEq)]
422#[cfg_attr(feature = "serialize", derive(Serialize))]
423#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
424pub struct Tilde {}
425
426#[derive(Clone, Debug, PartialEq)]
427#[cfg_attr(feature = "serialize", derive(Serialize))]
428#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
429pub struct TildeEqual {}
430
431#[derive(Clone, Debug, PartialEq)]
432#[cfg_attr(feature = "serialize", derive(Serialize))]
433#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
434pub struct UrlRaw<'s> {
435 pub raw: &'s str,
436 pub escaped: bool,
437}
438
439#[derive(Clone, Debug, PartialEq)]
440#[cfg_attr(feature = "serialize", derive(Serialize))]
441#[cfg_attr(feature = "serialize", serde(tag = "kind", rename_all = "camelCase"))]
442pub struct UrlTemplate<'s> {
443 pub raw: &'s str,
444 pub escaped: bool,
445 pub tail: bool,
446}