diff --git a/src/builtin/meta.rs b/src/builtin/meta.rs index 17fed3a..46f3c17 100644 --- a/src/builtin/meta.rs +++ b/src/builtin/meta.rs @@ -83,8 +83,10 @@ pub(crate) fn register(f: &mut HashMap) { "variable-exists".to_owned(), Box::new(|args, scope| { max_args!(args, 1); - let value = arg!(args, 0, "name"); - Ok(Value::bool(scope.var_exists(&value.to_string()))) + match arg!(args, 0, "name") { + Value::Ident(s, _) => Ok(Value::bool(scope.var_exists(&s))), + v => Err(format!("$name: {} is not a string.", v).into()), + } }), ); f.insert( diff --git a/tests/meta.rs b/tests/meta.rs index d40458b..d8c12e1 100644 --- a/tests/meta.rs +++ b/tests/meta.rs @@ -244,6 +244,15 @@ test!( "$a: red; a {\n color: variable-exists($name: a)\n}\n", "a {\n color: true;\n}\n" ); +test!( + variable_exists_quoted, + "$a: red; a {\n color: variable-exists('a')\n}\n", + "a {\n color: true;\n}\n" +); +error!( + variable_exists_not_string, + "a {\n color: variable-exists(12px)\n}\n", "Error: $name: 12px is not a string." +); test!( mixin_does_exist, "@mixin a{} a {\n color: mixin-exists(a)\n}\n",