oxc_css_parser/parser/
postcss_simple_vars.rs1use super::{
2 Parser,
3 state::{ParserState, QualifiedRuleContext},
4};
5use crate::{Parse, ast::*, config::Syntax, error::PResult, pos::Span};
6
7impl<'a> Parse<'a> for PostcssSimpleVar<'a> {
10 fn parse(input: &mut Parser<'a>) -> PResult<Self> {
11 debug_assert!(input.syntax == Syntax::Css);
12
13 let (name, span) = input.parse_dollar_var_ident()?;
14 Ok(PostcssSimpleVar { name, span })
15 }
16}
17
18impl<'a> Parse<'a> for PostcssSimpleVarDeclaration<'a> {
21 fn parse(input: &mut Parser<'a>) -> PResult<Self> {
22 debug_assert!(input.syntax == Syntax::Css);
23
24 let name = input.parse::<PostcssSimpleVar>()?;
25 let (_, colon_span) = input.cursor.expect_colon()?;
26 let (mut value, important, value_is_raw) = input
30 .with_state(ParserState {
31 qualified_rule_ctx: Some(QualifiedRuleContext::DeclarationValue),
32 in_statement: true,
33 ..input.state
34 })
35 .parse_css_any_value()?;
36 if let Some(important) = important {
42 value.push(ComponentValue::ImportantAnnotation(important));
43 }
44
45 let end = value.last().map(|v| v.span().end).unwrap_or(colon_span.end);
46 let span = Span { start: name.span.start, end };
47
48 Ok(PostcssSimpleVarDeclaration { name, colon_span, value, value_is_raw, span })
49 }
50}