remove panic from unclosed call args
This commit is contained in:
parent
737a6ba90d
commit
f52d784756
@ -324,13 +324,13 @@ pub(crate) fn eat_func_args<I: Iterator<Item = Token>>(
|
||||
|
||||
pub(crate) fn eat_call_args<I: Iterator<Item = Token>>(
|
||||
toks: &mut PeekMoreIterator<I>,
|
||||
span_before: Span,
|
||||
) -> SassResult<CallArgs> {
|
||||
let mut args: HashMap<CallArg, Vec<Token>> = HashMap::new();
|
||||
devour_whitespace_or_comment(toks)?;
|
||||
let mut name = String::new();
|
||||
let mut val: Vec<Token> = Vec::new();
|
||||
// todo: panics on a { color:rgb(; }
|
||||
let mut span = toks.peek().unwrap().pos();
|
||||
let mut span = toks.peek().ok_or(("expected \")\".", span_before))?.pos();
|
||||
loop {
|
||||
match toks.peek().unwrap().kind {
|
||||
'$' => {
|
||||
|
@ -200,7 +200,7 @@ pub(crate) fn eat_include<I: Iterator<Item = Token>>(
|
||||
match tok.kind {
|
||||
';' => CallArgs::new(name.span),
|
||||
'(' => {
|
||||
let tmp = eat_call_args(toks)?;
|
||||
let tmp = eat_call_args(toks, tok.pos)?;
|
||||
devour_whitespace_or_comment(toks)?;
|
||||
if let Some(tok) = toks.peek() {
|
||||
match tok.kind {
|
||||
|
@ -572,7 +572,8 @@ impl Value {
|
||||
});
|
||||
}
|
||||
|
||||
if let Some(Token { kind: '(', .. }) = toks.peek() {
|
||||
if let Some(Token { kind: '(', pos }) = toks.peek() {
|
||||
let pos = *pos;
|
||||
let as_ident = Identifier::from(&s);
|
||||
toks.next();
|
||||
let func = match scope.get_fn(Spanned {
|
||||
@ -583,7 +584,7 @@ impl Value {
|
||||
Err(_) => match GLOBAL_FUNCTIONS.get(as_ident.into_inner().as_str()) {
|
||||
Some(f) => {
|
||||
return Ok(IntermediateValue::Value(f.0(
|
||||
eat_call_args(toks)?,
|
||||
eat_call_args(toks, pos)?,
|
||||
scope,
|
||||
super_selector,
|
||||
)?)
|
||||
@ -600,11 +601,11 @@ impl Value {
|
||||
"url" => match try_eat_url(toks, scope, super_selector)? {
|
||||
Some(val) => s = val,
|
||||
None => s.push_str(
|
||||
&eat_call_args(toks)?.to_css_string(scope, super_selector)?,
|
||||
&eat_call_args(toks, pos)?.to_css_string(scope, super_selector)?,
|
||||
),
|
||||
},
|
||||
_ => s.push_str(
|
||||
&eat_call_args(toks)?.to_css_string(scope, super_selector)?,
|
||||
&eat_call_args(toks, pos)?.to_css_string(scope, super_selector)?,
|
||||
),
|
||||
}
|
||||
return Ok(
|
||||
@ -614,7 +615,7 @@ impl Value {
|
||||
},
|
||||
};
|
||||
return Ok(IntermediateValue::Value(func.eval(
|
||||
eat_call_args(toks)?,
|
||||
eat_call_args(toks, pos)?,
|
||||
scope,
|
||||
super_selector,
|
||||
)?)
|
||||
|
@ -45,3 +45,10 @@ test!(
|
||||
"@function foo($a, $b: $a) {\n @return $b;\n}\n\na {\n color: foo(2);\n}\n",
|
||||
"a {\n color: 2;\n}\n"
|
||||
);
|
||||
// todo: this should have a space after :
|
||||
// and should be "expected \")\"."
|
||||
error!(
|
||||
nothing_after_open,
|
||||
"a { color:rgb(; }",
|
||||
"Error: expected \"{\"."
|
||||
);
|
@ -128,3 +128,4 @@ error!(
|
||||
);
|
||||
error!(unclosed_dbl_quote, "@if true \" {}", "Error: Expected \".");
|
||||
error!(unclosed_sgl_quote, "@if true ' {}", "Error: Expected '.");
|
||||
error!(unclosed_call_args, "@if a({}", "Error: expected \")\".");
|
||||
|
Loading…
x
Reference in New Issue
Block a user