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