CallArg::Named is backed by Identifier rather than String

This commit is contained in:
ConnorSkees 2020-05-22 22:28:38 -04:00
parent d4acb3f014
commit 22607fb0ef

View File

@ -4,6 +4,7 @@ use codemap::{Span, Spanned};
use peekmore::PeekMoreIterator; use peekmore::PeekMoreIterator;
use crate::common::Identifier;
use crate::error::SassResult; use crate::error::SassResult;
use crate::scope::Scope; use crate::scope::Scope;
use crate::selector::Selector; use crate::selector::Selector;
@ -35,14 +36,14 @@ pub(crate) struct CallArgs(HashMap<CallArg, Vec<Token>>, Span);
#[derive(Debug, Clone, Hash, Eq, PartialEq)] #[derive(Debug, Clone, Hash, Eq, PartialEq)]
enum CallArg { enum CallArg {
Named(String), Named(Identifier),
Positional(usize), Positional(usize),
} }
impl CallArg { impl CallArg {
pub fn position(&self) -> Result<usize, String> { pub fn position(&self) -> Result<usize, String> {
match self { match self {
Self::Named(ref name) => Err(name.clone()), Self::Named(ref name) => Err(name.to_string()),
Self::Positional(p) => Ok(*p), Self::Positional(p) => Ok(*p),
} }
} }
@ -100,13 +101,13 @@ impl CallArgs {
/// Get argument by name /// Get argument by name
/// ///
/// Removes the argument /// Removes the argument
pub fn get_named( pub fn get_named<T: Into<Identifier>>(
&mut self, &mut self,
val: String, val: T,
scope: &Scope, scope: &Scope,
super_selector: &Selector, super_selector: &Selector,
) -> Option<SassResult<Spanned<Value>>> { ) -> Option<SassResult<Spanned<Value>>> {
match self.0.remove(&CallArg::Named(val)) { match self.0.remove(&CallArg::Named(val.into())) {
Some(v) => Some(Value::from_vec(v, scope, super_selector)), Some(v) => Some(Value::from_vec(v, scope, super_selector)),
None => None, None => None,
} }
@ -368,7 +369,7 @@ pub(crate) fn eat_call_args<I: Iterator<Item = Token>>(
if name.is_empty() { if name.is_empty() {
CallArg::Positional(args.len()) CallArg::Positional(args.len())
} else { } else {
CallArg::Named(name.replace('_', "-")) CallArg::Named(name.into())
}, },
val, val,
); );
@ -396,7 +397,7 @@ pub(crate) fn eat_call_args<I: Iterator<Item = Token>>(
if name.is_empty() { if name.is_empty() {
CallArg::Positional(args.len()) CallArg::Positional(args.len())
} else { } else {
CallArg::Named(name.replace('_', "-")) CallArg::Named(name.clone().into())
}, },
val.clone(), val.clone(),
); );