diff --git a/src/args.rs b/src/args.rs index dced640..283f3b7 100644 --- a/src/args.rs +++ b/src/args.rs @@ -199,12 +199,16 @@ pub(crate) fn eat_func_args>( super_selector: &Selector, ) -> SassResult { let mut args: Vec = Vec::new(); + let mut close_paren_span: Span = toks.peek().unwrap().pos(); devour_whitespace(toks); - while let Some(Token { kind, .. }) = toks.next() { + while let Some(Token { kind, pos }) = toks.next() { let name = match kind { '$' => eat_ident(toks, scope, super_selector)?, - ')' => break, + ')' => { + close_paren_span = pos; + break; + } _ => todo!(), }; let mut default: Vec = Vec::new(); @@ -234,6 +238,7 @@ pub(crate) fn eat_func_args>( default: Some(default), is_variadic, }); + close_paren_span = tok.pos(); break; } _ => { @@ -268,6 +273,7 @@ pub(crate) fn eat_func_args>( break; } ')' => { + close_paren_span = span; args.push(FuncArg { name: name.replace('_', "-"), default: if default.is_empty() { @@ -289,10 +295,10 @@ pub(crate) fn eat_func_args>( devour_whitespace(toks); } devour_whitespace(toks); - if let Some(Token { kind: '{', .. }) = toks.next() { - } else { - todo!("expected `{{` after args") - } + match toks.next() { + Some(v) if v.kind == '{' => {} + Some(..) | None => return Err(("expected \"{\".", close_paren_span).into()), + }; Ok(FuncArgs(args)) } diff --git a/src/output.rs b/src/output.rs index 1b48cf7..f4f25be 100644 --- a/src/output.rs +++ b/src/output.rs @@ -169,7 +169,7 @@ impl Css { ._inner_pretty_print(buf, nesting + 1)?; writeln!(buf, "{}}}", padding)?; } - _ => todo!("at-rule other than unknown at toplevel"), + _ => todo!("at-rule other than unknown at toplevel: {:?}", r), }, Toplevel::Style(s) => { writeln!(buf, "{}{}", padding, s.to_string()?)?;