diff --git a/src/builtin/selector.rs b/src/builtin/selector.rs index a437dbd..923a56b 100644 --- a/src/builtin/selector.rs +++ b/src/builtin/selector.rs @@ -3,6 +3,7 @@ use super::{Builtin, GlobalFunctionMap}; use crate::args::CallArgs; +use crate::common::{Brackets, ListSeparator, QuoteKind}; use crate::error::SassResult; use crate::scope::Scope; use crate::selector::{ @@ -42,7 +43,36 @@ fn simple_selectors( super_selector: &Selector, ) -> SassResult { args.max_args(1)?; - todo!("built-in fn simple-selectors") + // todo: Value::to_compound_selector + let selector = arg!(args, scope, super_selector, 0, "selector").to_selector( + args.span(), + scope, + super_selector, + "selector", + false, + )?; + + if selector.0.components.len() != 1 { + return Err(("$selector: expected selector.", args.span()).into()); + } + + let compound = if let Some(ComplexSelectorComponent::Compound(compound)) = + selector.0.components[0].components.get(0).cloned() + { + compound + } else { + todo!() + }; + + Ok(Value::List( + compound + .components + .into_iter() + .map(|simple| Value::String(simple.to_string(), QuoteKind::None)) + .collect(), + ListSeparator::Comma, + Brackets::None, + )) } fn selector_parse( diff --git a/tests/simple-selectors.rs b/tests/simple-selectors.rs new file mode 100644 index 0000000..0c987d9 --- /dev/null +++ b/tests/simple-selectors.rs @@ -0,0 +1,15 @@ +#![cfg(test)] + +#[macro_use] +mod macros; + +test!( + two_classes, + "a {\n color: simple-selectors(\".foo.bar\");\n}\n", + "a {\n color: .foo, .bar;\n}\n" +); +test!( + three_classes, + "a {\n color: simple-selectors(\".foo.bar.baz\");\n}\n", + "a {\n color: .foo, .bar, .baz;\n}\n" +);