implement builtin function meta.module-variables
This commit is contained in:
parent
2b9cad5971
commit
36d7b5d920
@ -378,12 +378,12 @@ pub(crate) fn declare(f: &mut Module) {
|
|||||||
#[cfg(feature = "random")]
|
#[cfg(feature = "random")]
|
||||||
f.insert_builtin("random", random);
|
f.insert_builtin("random", random);
|
||||||
|
|
||||||
f.insert_builtin_var(
|
|
||||||
"pi",
|
|
||||||
Value::Dimension(Some(Number::from(std::f64::consts::PI)), Unit::None, true),
|
|
||||||
);
|
|
||||||
f.insert_builtin_var(
|
f.insert_builtin_var(
|
||||||
"e",
|
"e",
|
||||||
Value::Dimension(Some(Number::from(std::f64::consts::E)), Unit::None, true),
|
Value::Dimension(Some(Number::from(std::f64::consts::E)), Unit::None, true),
|
||||||
);
|
);
|
||||||
|
f.insert_builtin_var(
|
||||||
|
"pi",
|
||||||
|
Value::Dimension(Some(Number::from(std::f64::consts::PI)), Unit::None, true),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,28 @@ fn module_functions(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult<V
|
|||||||
|
|
||||||
fn module_variables(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult<Value> {
|
fn module_variables(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult<Value> {
|
||||||
args.max_args(1)?;
|
args.max_args(1)?;
|
||||||
todo!()
|
|
||||||
|
let module = match args.get_err(0, "module")? {
|
||||||
|
Value::String(s, ..) => s,
|
||||||
|
v => {
|
||||||
|
return Err((
|
||||||
|
format!("$module: {} is not a string.", v.inspect(args.span())?),
|
||||||
|
args.span(),
|
||||||
|
)
|
||||||
|
.into())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(Value::Map(
|
||||||
|
parser
|
||||||
|
.modules
|
||||||
|
.get(&module)
|
||||||
|
.ok_or((
|
||||||
|
format!("There is no module with the namespace \"{}\".", module),
|
||||||
|
args.span(),
|
||||||
|
))?
|
||||||
|
.variables(),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn declare(f: &mut Module) {
|
pub(crate) fn declare(f: &mut Module) {
|
||||||
|
@ -68,6 +68,20 @@ impl Module {
|
|||||||
.collect::<Vec<(Value, Value)>>(),
|
.collect::<Vec<(Value, Value)>>(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn variables(&self) -> SassMap {
|
||||||
|
SassMap::new_with(
|
||||||
|
self.vars
|
||||||
|
.iter()
|
||||||
|
.map(|(key, value)| {
|
||||||
|
(
|
||||||
|
Value::String(key.to_string(), QuoteKind::Quoted),
|
||||||
|
value.clone(),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect::<Vec<(Value, Value)>>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn declare_module_color() -> Module {
|
pub(crate) fn declare_module_color() -> Module {
|
||||||
|
15
tests/meta-module.rs
Normal file
15
tests/meta-module.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#![cfg(test)]
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
mod macros;
|
||||||
|
|
||||||
|
test!(
|
||||||
|
module_functions_builtin,
|
||||||
|
"@use 'sass:meta';\na {\n color: inspect(meta.module-functions(meta));\n}\n",
|
||||||
|
"a {\n color: (\"feature-exists\": get-function(\"feature-exists\"), \"inspect\": get-function(\"inspect\"), \"type-of\": get-function(\"type-of\"), \"keywords\": get-function(\"keywords\"), \"global-variable-exists\": get-function(\"global-variable-exists\"), \"variable-exists\": get-function(\"variable-exists\"), \"function-exists\": get-function(\"function-exists\"), \"mixin-exists\": get-function(\"mixin-exists\"), \"content-exists\": get-function(\"content-exists\"), \"module-variables\": get-function(\"module-variables\"), \"module-functions\": get-function(\"module-functions\"), \"get-function\": get-function(\"get-function\"), \"call\": get-function(\"call\"));\n}\n"
|
||||||
|
);
|
||||||
|
test!(
|
||||||
|
module_variables_builtin,
|
||||||
|
"@use 'sass:meta';\n@use 'sass:math';\na {\n color: inspect(meta.module-variables(math));\n}\n",
|
||||||
|
"a {\n color: (\"e\": 2.7182818285, \"pi\": 3.1415926536);\n}\n"
|
||||||
|
);
|
Loading…
x
Reference in New Issue
Block a user