use super::{
Parser,
state::{ParserState, QualifiedRuleContext},
};
use crate::{Parse, ast::*, config::Syntax, error::PResult, pos::Span};
impl<'a> Parse<'a> for PostcssSimpleVar<'a> {
fn parse(input: &mut Parser<'a>) -> PResult<Self> {
debug_assert!(input.syntax == Syntax::Css);
let (name, span) = input.parse_dollar_var_ident()?;
Ok(PostcssSimpleVar { name, span })
}
}
impl<'a> Parse<'a> for PostcssSimpleVarDeclaration<'a> {
fn parse(input: &mut Parser<'a>) -> PResult<Self> {
debug_assert!(input.syntax == Syntax::Css);
let name = input.parse::<PostcssSimpleVar>()?;
let (_, colon_span) = input.cursor.expect_colon()?;
let (mut value, important, value_is_raw) = input
.with_state(ParserState {
qualified_rule_ctx: Some(QualifiedRuleContext::DeclarationValue),
in_statement: true,
..input.state
})
.parse_css_any_value()?;
if let Some(important) = important {
value.push(ComponentValue::ImportantAnnotation(important));
}
let end = value.last().map(|v| v.span().end).unwrap_or(colon_span.end);
let span = Span { start: name.span.start, end };
Ok(PostcssSimpleVarDeclaration { name, colon_span, value, value_is_raw, span })
}
}