store &'static str rather than String for builtin fn names

This commit is contained in:
ConnorSkees 2020-04-30 15:00:57 -04:00
parent f2322dda4d
commit 2eef3e9f6a
12 changed files with 98 additions and 96 deletions

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use num_traits::One;
@ -8,9 +8,9 @@ use crate::common::QuoteKind;
use crate::unit::Unit;
use crate::value::{Number, Value};
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert(
"hsl".to_owned(),
"hsl",
Builtin::new(|mut args, scope, super_selector| {
if args.is_empty() {
return Err(("Missing argument $channels.", args.span()).into());
@ -218,7 +218,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"hsla".to_owned(),
"hsla",
Builtin::new(|mut args, scope, super_selector| {
if args.is_empty() {
return Err(("Missing argument $channels.", args.span()).into());
@ -426,7 +426,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"hue".to_owned(),
"hue",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -440,7 +440,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"saturation".to_owned(),
"saturation",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -454,7 +454,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"lightness".to_owned(),
"lightness",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -468,7 +468,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"adjust-hue".to_owned(),
"adjust-hue",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -498,7 +498,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"lighten".to_owned(),
"lighten",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -528,7 +528,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"darken".to_owned(),
"darken",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -558,7 +558,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"saturate".to_owned(),
"saturate",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
if args.len() == 1 {
@ -605,7 +605,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"desaturate".to_owned(),
"desaturate",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -635,7 +635,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"grayscale".to_owned(),
"grayscale",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -658,7 +658,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"complement".to_owned(),
"complement",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -675,7 +675,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"invert".to_owned(),
"invert",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let weight = match arg!(

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use super::Builtin;
@ -7,7 +7,7 @@ mod opacity;
mod other;
mod rgb;
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
hsl::register(f);
opacity::register(f);
other::register(f);

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use super::Builtin;
use crate::common::QuoteKind;
@ -6,9 +6,9 @@ use crate::unit::Unit;
use crate::value::Number;
use crate::value::Value;
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert(
"alpha".to_owned(),
"alpha",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -22,7 +22,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"opacity".to_owned(),
"opacity",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -40,7 +40,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"opacify".to_owned(),
"opacify",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -70,7 +70,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"fade-in".to_owned(),
"fade-in",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -100,7 +100,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"transparentize".to_owned(),
"transparentize",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -130,7 +130,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"fade-out".to_owned(),
"fade-out",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let color = match arg!(args, scope, super_selector, 0, "color") {

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use num_traits::{One, Signed, Zero};
@ -50,8 +50,8 @@ macro_rules! opt_hsl {
};
}
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
f.insert("change-color".to_owned(), Builtin::new(|mut args, scope, super_selector| {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert("change-color", Builtin::new(|mut args, scope, super_selector| {
if args.get_positional(1, scope, super_selector).is_some() {
return Err(
("Only one positional argument is allowed. All other arguments must be passed by name.", args.span()
@ -98,7 +98,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}))
}));
f.insert(
"adjust-color".to_owned(),
"adjust-color",
Builtin::new(|mut args, scope, super_selector| {
let color = match arg!(args, scope, super_selector, 0, "color") {
Value::Color(c) => c,
@ -176,7 +176,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"scale-color".to_owned(),
"scale-color",
Builtin::new(|mut args, scope, super_selector| {
let span = args.span();
let color = match arg!(args, scope, super_selector, 0, "color") {
@ -266,7 +266,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"ie-hex-str".to_owned(),
"ie-hex-str",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let color = match arg!(args, scope, super_selector, 0, "color") {

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use num_traits::One;
@ -8,9 +8,9 @@ use crate::common::QuoteKind;
use crate::unit::Unit;
use crate::value::{Number, Value};
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert(
"rgb".to_owned(),
"rgb",
Builtin::new(|mut args, scope, super_selector| {
if args.is_empty() {
return Err(("Missing argument $channels.", args.span()).into());
@ -337,7 +337,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"rgba".to_owned(),
"rgba",
Builtin::new(|mut args, scope, super_selector| {
if args.is_empty() {
return Err(("Missing argument $channels.", args.span()).into());
@ -664,7 +664,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"red".to_owned(),
"red",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -678,7 +678,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"green".to_owned(),
"green",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -692,7 +692,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"blue".to_owned(),
"blue",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "color") {
@ -706,7 +706,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"mix".to_owned(),
"mix",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(3)?;
let color1 = match arg!(args, scope, super_selector, 0, "color1") {

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use num_traits::{One, Signed, ToPrimitive, Zero};
@ -11,7 +11,7 @@ use crate::selector::Selector;
use crate::unit::Unit;
use crate::value::{Number, Value};
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
fn length(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
args.max_args(1)?;
let len = match arg!(args, scope, super_selector, 0, "list") {
@ -321,13 +321,13 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
Ok(Value::List(result, ListSeparator::Comma, Brackets::None))
}
f.insert("length".to_owned(), Builtin::new(length));
f.insert("nth".to_owned(), Builtin::new(nth));
f.insert("list-separator".to_owned(), Builtin::new(list_separator));
f.insert("set-nth".to_owned(), Builtin::new(set_nth));
f.insert("append".to_owned(), Builtin::new(append));
f.insert("join".to_owned(), Builtin::new(join));
f.insert("is-bracketed".to_owned(), Builtin::new(is_bracketed));
f.insert("index".to_owned(), Builtin::new(index));
f.insert("zip".to_owned(), Builtin::new(zip));
f.insert("length", Builtin::new(length));
f.insert("nth", Builtin::new(nth));
f.insert("list-separator", Builtin::new(list_separator));
f.insert("set-nth", Builtin::new(set_nth));
f.insert("append", Builtin::new(append));
f.insert("join", Builtin::new(join));
f.insert("is-bracketed", Builtin::new(is_bracketed));
f.insert("index", Builtin::new(index));
f.insert("zip", Builtin::new(zip));
}

View File

@ -1,12 +1,12 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use super::Builtin;
use crate::common::{Brackets, ListSeparator};
use crate::value::{SassMap, Value};
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert(
"map-get".to_owned(),
"map-get",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let key = arg!(args, scope, super_selector, 1, "key");
@ -25,7 +25,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"map-has-key".to_owned(),
"map-has-key",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let key = arg!(args, scope, super_selector, 1, "key");
@ -44,7 +44,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"map-keys".to_owned(),
"map-keys",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let map = match arg!(args, scope, super_selector, 0, "map") {
@ -66,7 +66,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"map-values".to_owned(),
"map-values",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let map = match arg!(args, scope, super_selector, 0, "map") {
@ -88,7 +88,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"map-merge".to_owned(),
"map-merge",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let mut map1 = match arg!(args, scope, super_selector, 0, "map1") {
@ -118,7 +118,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"map-remove".to_owned(),
"map-remove",
Builtin::new(|mut args, scope, super_selector| {
let mut map = match arg!(args, scope, super_selector, 0, "map") {
Value::Map(m) => m,

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
#[cfg(feature = "random")]
use num_traits::{One, Signed, ToPrimitive, Zero};
@ -9,9 +9,9 @@ use super::Builtin;
use crate::unit::Unit;
use crate::value::{Number, Value};
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert(
"percentage".to_owned(),
"percentage",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let num = match arg!(args, scope, super_selector, 0, "number") {
@ -41,7 +41,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"round".to_owned(),
"round",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "number") {
@ -58,7 +58,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"ceil".to_owned(),
"ceil",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "number") {
@ -75,7 +75,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"floor".to_owned(),
"floor",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "number") {
@ -92,7 +92,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"abs".to_owned(),
"abs",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "number") {
@ -109,7 +109,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"comparable".to_owned(),
"comparable",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let unit1 = match arg!(args, scope, super_selector, 0, "number1") {
@ -145,7 +145,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
// TODO: write tests for this. how?
#[cfg(feature = "random")]
f.insert(
"random".to_owned(),
"random",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let limit = match arg!(args, scope, super_selector, 0, "limit" = Value::Null) {

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use codemap::Spanned;
@ -8,9 +8,9 @@ use crate::scope::global_var_exists;
use crate::unit::Unit;
use crate::value::{SassFunction, Value};
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert(
"if".to_owned(),
"if",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(3)?;
if arg!(args, scope, super_selector, 0, "condition").is_true(args.span())? {
@ -21,7 +21,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"feature-exists".to_owned(),
"feature-exists",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "feature") {
@ -55,7 +55,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"unit".to_owned(),
"unit",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let unit = match arg!(args, scope, super_selector, 0, "number") {
@ -75,7 +75,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"type-of".to_owned(),
"type-of",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
let value = arg!(args, scope, super_selector, 0, "value");
@ -86,7 +86,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"unitless".to_owned(),
"unitless",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "number") {
@ -97,7 +97,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"inspect".to_owned(),
"inspect",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
Ok(Value::Ident(
@ -107,7 +107,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"variable-exists".to_owned(),
"variable-exists",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "name") {
@ -121,7 +121,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"global-variable-exists".to_owned(),
"global-variable-exists",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "name") {
@ -135,7 +135,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"mixin-exists".to_owned(),
"mixin-exists",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
match arg!(args, scope, super_selector, 0, "name") {
@ -149,12 +149,12 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"function-exists".to_owned(),
"function-exists",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
match arg!(args, scope, super_selector, 0, "name") {
Value::Ident(s, _) => Ok(Value::bool(
scope.fn_exists(&s) || GLOBAL_FUNCTIONS.contains_key(&s),
scope.fn_exists(&s) || GLOBAL_FUNCTIONS.contains_key(s.as_str()),
)),
v => Err((
format!("$name: {} is not a string.", v.to_css_string(args.span())?),
@ -165,7 +165,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"get-function".to_owned(),
"get-function",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(3)?;
let name = match arg!(args, scope, super_selector, 0, "name") {
@ -208,7 +208,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
span: args.span(),
}) {
Ok(f) => SassFunction::UserDefined(Box::new(f), name),
Err(..) => match GLOBAL_FUNCTIONS.get(&name) {
Err(..) => match GLOBAL_FUNCTIONS.get(name.as_str()) {
Some(f) => SassFunction::Builtin(f.clone(), name),
None => {
return Err((format!("Function not found: {}", name), args.span()).into())
@ -220,7 +220,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"call".to_owned(),
"call",
Builtin::new(|mut args, scope, super_selector| {
let func = match arg!(args, scope, super_selector, 0, "function") {
Value::Function(f) => f,

View File

@ -19,6 +19,8 @@ mod meta;
mod selector;
mod string;
pub(crate) type GlobalFunctionMap = HashMap<&'static str, Builtin>;
static FUNCTION_COUNT: AtomicUsize = AtomicUsize::new(0);
// TODO: impl Fn
@ -40,7 +42,7 @@ impl PartialEq for Builtin {
}
}
pub(crate) static GLOBAL_FUNCTIONS: Lazy<HashMap<String, Builtin>> = Lazy::new(|| {
pub(crate) static GLOBAL_FUNCTIONS: Lazy<GlobalFunctionMap> = Lazy::new(|| {
let mut m = HashMap::new();
color::register(&mut m);
list::register(&mut m);

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use super::GlobalFunctionMap;
use num_bigint::BigInt;
use num_traits::{Signed, ToPrimitive, Zero};
@ -11,9 +11,9 @@ use crate::common::QuoteKind;
use crate::unit::Unit;
use crate::value::{Number, Value};
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
pub(crate) fn register(f: &mut GlobalFunctionMap) {
f.insert(
"to-upper-case".to_owned(),
"to-upper-case",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "string") {
@ -30,7 +30,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"to-lower-case".to_owned(),
"to-lower-case",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "string") {
@ -47,7 +47,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"str-length".to_owned(),
"str-length",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "string") {
@ -67,7 +67,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"quote".to_owned(),
"quote",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "string") {
@ -84,7 +84,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"unquote".to_owned(),
"unquote",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(1)?;
match arg!(args, scope, super_selector, 0, "string") {
@ -101,7 +101,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"str-slice".to_owned(),
"str-slice",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(3)?;
let (string, quotes) = match arg!(args, scope, super_selector, 0, "string") {
@ -205,7 +205,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"str-index".to_owned(),
"str-index",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(2)?;
let s1 = match arg!(args, scope, super_selector, 0, "string") {
@ -243,7 +243,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}),
);
f.insert(
"str-insert".to_owned(),
"str-insert",
Builtin::new(|mut args, scope, super_selector| {
args.max_args(3)?;
let (s1, quotes) = match arg!(args, scope, super_selector, 0, "string") {
@ -347,7 +347,7 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
);
#[cfg(feature = "random")]
f.insert(
"unique-id".to_owned(),
"unique-id",
Builtin::new(|args, _, _| {
args.max_args(0)?;
let mut rng = thread_rng();

View File

@ -519,7 +519,7 @@ impl Value {
span,
}) {
Ok(f) => f,
Err(_) => match GLOBAL_FUNCTIONS.get(&s.replace('_', "-")) {
Err(_) => match GLOBAL_FUNCTIONS.get(s.replace('_', "-").as_str()) {
Some(f) => {
return Ok(IntermediateValue::Value(Spanned {
node: f.0(eat_call_args(toks)?, scope, super_selector)?,