From 36ec80e0daf63925d3e4e1be33c03ec4671863bb Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Mon, 17 Feb 2020 09:33:52 -0500 Subject: [PATCH] Use .remove() over .get() to avoid clone --- src/mixin.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/mixin.rs b/src/mixin.rs index 8c1e411..33de329 100644 --- a/src/mixin.rs +++ b/src/mixin.rs @@ -69,18 +69,21 @@ impl Mixin { Ok((name, Mixin::new(scope.clone(), args, body))) } - pub fn args(mut self, args: &CallArgs) -> Mixin { + pub fn args(mut self, args: &mut CallArgs) -> SassResult { for (idx, arg) in self.args.0.iter().enumerate() { - let val = match args.get(&format!("{}", idx)) { - Some(v) => v.clone(), - None => match args.get(&arg.name) { - Some(v) => v.clone(), - None => arg.default.clone().expect("missing variable!"), + let val = match args.remove(&format!("{}", idx)) { + Some(v) => v, + None => match args.remove(&arg.name) { + Some(v) => v, + None => match &arg.default { + Some(v) => v.clone(), + None => return Err(format!("Missing argument ${}.", &arg.name).into()), + }, }, }; self.scope.insert_var(&arg.name, val); } - self + Ok(self) } pub fn call(mut self, super_selector: &Selector) -> SassResult> { @@ -132,7 +135,7 @@ pub(crate) fn eat_include>( devour_whitespace(toks); - let args = if let Some(tok) = toks.next() { + let mut args = if let Some(tok) = toks.next() { match tok.kind { TokenKind::Symbol(Symbol::SemiColon) => CallArgs::new(), TokenKind::Symbol(Symbol::OpenParen) => { @@ -153,6 +156,6 @@ pub(crate) fn eat_include>( let mixin = scope.get_mixin(&name)?.clone(); - let rules = mixin.args(&args).call(super_selector)?; + let rules = mixin.args(&mut args)?.call(super_selector)?; Ok(rules) }