oxc_css_parser/parser/at_rule/
namespace.rs1use super::Parser;
2use crate::{Parse, ast::*, error::PResult, tokenizer::Token};
3
4impl<'a> Parse<'a> for NamespacePrelude<'a> {
9 fn parse(input: &mut Parser<'a>) -> PResult<Self> {
10 let prefix = match &input.cursor.peek()?.token {
11 Token::Ident(ident) => {
12 if ident.name().eq_ignore_ascii_case("url") {
13 None
14 } else {
15 Some(InterpolableIdent::Literal(input.parse::<Ident>()?))
16 }
17 }
18 Token::HashLBrace(..) | Token::AtLBraceVar(..) => {
19 input.parse::<InterpolableIdent>().map(Some)?
20 }
21 _ => None,
22 };
23 let uri = match &input.cursor.peek()?.token {
24 Token::Str(..) | Token::StrTemplate(..) => {
25 input.parse().map(NamespacePreludeUri::Str)?
26 }
27 _ => input.parse().map(NamespacePreludeUri::Url)?,
28 };
29
30 let mut span = uri.span().clone();
31 if let Some(prefix) = &prefix {
32 span.start = prefix.span().start;
33 }
34 Ok(NamespacePrelude { prefix, uri, span })
35 }
36}