Skip to main content

oxc_css_parser/tokenizer/
token.rs

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