Value::inspect returns cow

This commit is contained in:
ConnorSkees 2020-05-06 11:50:35 -04:00
parent 5ba28e27f3
commit 6729f24b17
3 changed files with 20 additions and 18 deletions

View File

@ -71,7 +71,7 @@ impl AtRule {
super_selector, super_selector,
)?; )?;
return Err((message.inspect(span)?, span.merge(kind_span)).into()); return Err((message.inspect(span)?.to_string(), span.merge(kind_span)).into());
} }
AtRuleKind::Warn => { AtRuleKind::Warn => {
let Spanned { let Spanned {
@ -111,7 +111,7 @@ impl AtRule {
devour_whitespace(toks); devour_whitespace(toks);
Spanned { Spanned {
node: AtRule::Debug(Spanned { node: AtRule::Debug(Spanned {
node: message.inspect(span)?, node: message.inspect(span)?.into(),
span, span,
}), }),
span, span,

View File

@ -96,7 +96,9 @@ fn unitless(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> Sas
fn inspect(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> { fn inspect(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
args.max_args(1)?; args.max_args(1)?;
Ok(Value::Ident( Ok(Value::Ident(
arg!(args, scope, super_selector, 0, "value").inspect(args.span())?, arg!(args, scope, super_selector, 0, "value")
.inspect(args.span())?
.into(),
QuoteKind::None, QuoteKind::None,
)) ))
} }

View File

@ -265,39 +265,39 @@ impl Value {
// TODO: // TODO:
// https://github.com/sass/dart-sass/blob/d4adea7569832f10e3a26d0e420ae51640740cfb/lib/src/ast/sass/expression/list.dart#L39 // https://github.com/sass/dart-sass/blob/d4adea7569832f10e3a26d0e420ae51640740cfb/lib/src/ast/sass/expression/list.dart#L39
pub fn inspect(&self, span: Span) -> SassResult<String> { pub fn inspect(&self, span: Span) -> SassResult<Cow<'static, str>> {
Ok(match self { Ok(match self {
Value::List(v, _, brackets) if v.is_empty() => match brackets { Value::List(v, _, brackets) if v.is_empty() => match brackets {
Brackets::None => "()".to_string(), Brackets::None => Cow::Borrowed("()"),
Brackets::Bracketed => "[]".to_string(), Brackets::Bracketed => Cow::Borrowed("[]"),
}, },
Value::List(v, sep, brackets) if v.len() == 1 => match brackets { Value::List(v, sep, brackets) if v.len() == 1 => match brackets {
Brackets::None => match sep { Brackets::None => match sep {
ListSeparator::Space => v[0].inspect(span)?, ListSeparator::Space => v[0].inspect(span)?,
ListSeparator::Comma => format!("({},)", v[0].inspect(span)?), ListSeparator::Comma => Cow::Owned(format!("({},)", v[0].inspect(span)?)),
}, },
Brackets::Bracketed => match sep { Brackets::Bracketed => match sep {
ListSeparator::Space => format!("[{}]", v[0].inspect(span)?), ListSeparator::Space => Cow::Owned(format!("[{}]", v[0].inspect(span)?)),
ListSeparator::Comma => format!("[{},]", v[0].inspect(span)?), ListSeparator::Comma => Cow::Owned(format!("[{},]", v[0].inspect(span)?)),
}, },
}, },
Self::List(vals, sep, brackets) => match brackets { Self::List(vals, sep, brackets) => Cow::Owned(match brackets {
Brackets::None => vals Brackets::None => vals
.iter() .iter()
.map(|x| x.inspect(span)) .map(|x| x.inspect(span))
.collect::<SassResult<Vec<String>>>()? .collect::<SassResult<Vec<Cow<'static, str>>>>()?
.join(sep.as_str()), .join(sep.as_str()),
Brackets::Bracketed => format!( Brackets::Bracketed => format!(
"[{}]", "[{}]",
vals.iter() vals.iter()
.map(|x| x.inspect(span)) .map(|x| x.inspect(span))
.collect::<SassResult<Vec<String>>>()? .collect::<SassResult<Vec<Cow<'static, str>>>>()?
.join(sep.as_str()), .join(sep.as_str()),
), ),
}, }),
Value::Function(f) => format!("get-function(\"{}\")", f.name()), Value::Function(f) => Cow::Owned(format!("get-function(\"{}\")", f.name())),
Value::Null => "null".to_string(), Value::Null => Cow::Borrowed("null"),
Value::Map(map) => format!( Value::Map(map) => Cow::Owned(format!(
"({})", "({})",
map.iter() map.iter()
.map(|(k, v)| Ok(format!( .map(|(k, v)| Ok(format!(
@ -307,9 +307,9 @@ impl Value {
))) )))
.collect::<SassResult<Vec<String>>>()? .collect::<SassResult<Vec<String>>>()?
.join(", ") .join(", ")
), )),
Value::Paren(v) => v.inspect(span)?, Value::Paren(v) => v.inspect(span)?,
v => v.to_css_string(span)?.into(), v => v.to_css_string(span)?,
}) })
} }