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()? {
11 token if token.ident(input.source).is_some() => {
12 if token.is_ident_name_eq_ignore_ascii_case(input.source, "url") {
13 None
14 } else {
15 Some(InterpolableIdent::Literal(input.parse::<Ident>()?))
16 }
17 }
18 token if matches!(token.token, 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();
31 if let Some(prefix) = &prefix {
32 span.start = prefix.span().start;
33 }
34 Ok(NamespacePrelude { prefix, uri, span })
35 }
36}