css_ast/functions/
ident_function.rs1use super::prelude::*;
2use crate::{NumericValue, Value};
3
4#[node]
13#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
15#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(self))]
16#[derive(csskit_derives::NodeWithMetadata)]
17#[metadata(declaration_kinds = Computed)]
18pub struct IdentFunction<'a> {
19 #[atom(CssAtomSet::Ident)]
20 pub name: T![Function],
21 pub args: Vec<'a, IdentArg<'a>>,
22 #[semantic_eq(skip)]
23 pub close: T![')'],
24}
25
26#[node]
37#[derive(Parse, Peek, ToCursors, ToSpan, SemanticEq, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
38#[cfg_attr(feature = "serde", derive(serde::Serialize), serde())]
39#[cfg_attr(feature = "visitable", derive(csskit_derives::Visitable), visit(children))]
40#[derive(csskit_derives::NodeWithMetadata)]
41pub enum IdentArg<'a> {
42 #[cfg_attr(feature = "visitable", visit(skip))]
43 String(T![String]),
44 Integer(NumericValue<'a, CSSInt>),
45 Keyword(Value<'a, T![Ident]>),
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51 use crate::CssAtomSet;
52 use css_parse::assert_parse;
53
54 #[test]
55 fn test_ident_function() {
56 assert_parse!(CssAtomSet::ATOMS, IdentFunction, "ident(foo)");
57 assert_parse!(CssAtomSet::ATOMS, IdentFunction, "ident('vtl-'sibling-index())");
58 assert_parse!(CssAtomSet::ATOMS, IdentFunction, "ident(var(--id))");
59 assert_parse!(CssAtomSet::ATOMS, IdentFunction, "ident(var(--id)'-title')");
60 }
61}