Change return type and name of Mixin::from_tokens
This commit is contained in:
parent
6efb4141f6
commit
f23dec81ec
@ -362,7 +362,7 @@ impl<'a> StyleSheetParser<'a> {
|
|||||||
}
|
}
|
||||||
TokenKind::AtRule(AtRuleKind::Mixin) => {
|
TokenKind::AtRule(AtRuleKind::Mixin) => {
|
||||||
let (name, mixin) =
|
let (name, mixin) =
|
||||||
Mixin::from_tokens(&mut self.lexer, &self.global_scope).unwrap();
|
Mixin::decl_from_tokens(&mut self.lexer, &self.global_scope).unwrap();
|
||||||
self.global_scope.mixins.insert(name, mixin);
|
self.global_scope.mixins.insert(name, mixin);
|
||||||
}
|
}
|
||||||
TokenKind::AtRule(_) => {
|
TokenKind::AtRule(_) => {
|
||||||
@ -462,7 +462,10 @@ fn eat_at_rule<I: Iterator<Item = Token>>(
|
|||||||
Err(Printer::Debug(pos, message))
|
Err(Printer::Debug(pos, message))
|
||||||
}
|
}
|
||||||
AtRuleKind::Mixin => {
|
AtRuleKind::Mixin => {
|
||||||
let (name, mixin) = Mixin::from_tokens(toks, scope)?;
|
let (name, mixin) = match Mixin::decl_from_tokens(toks, scope) {
|
||||||
|
Ok(m) => m,
|
||||||
|
Err(e) => return Err(Printer::Error(e.0, e.1)),
|
||||||
|
};
|
||||||
Ok(Expr::MixinDecl(name, mixin))
|
Ok(Expr::MixinDecl(name, mixin))
|
||||||
}
|
}
|
||||||
_ => todo!("encountered unimplemented at rule"),
|
_ => todo!("encountered unimplemented at rule"),
|
||||||
@ -541,7 +544,7 @@ pub(crate) fn eat_expr<I: Iterator<Item = Token>>(
|
|||||||
}
|
}
|
||||||
TokenKind::AtRule(AtRuleKind::Mixin) => {
|
TokenKind::AtRule(AtRuleKind::Mixin) => {
|
||||||
toks.next();
|
toks.next();
|
||||||
let (name, mixin) = Mixin::from_tokens(toks, scope).unwrap();
|
let (name, mixin) = Mixin::decl_from_tokens(toks, scope)?;
|
||||||
return Ok(Some(Expr::MixinDecl(name, mixin)));
|
return Ok(Some(Expr::MixinDecl(name, mixin)));
|
||||||
}
|
}
|
||||||
TokenKind::AtRule(_) => {
|
TokenKind::AtRule(_) => {
|
||||||
|
12
src/mixin.rs
12
src/mixin.rs
@ -1,7 +1,7 @@
|
|||||||
use std::iter::Peekable;
|
use std::iter::Peekable;
|
||||||
use std::vec::IntoIter;
|
use std::vec::IntoIter;
|
||||||
|
|
||||||
use crate::common::{Pos, Printer, Scope, Symbol};
|
use crate::common::{Pos, Scope, Symbol};
|
||||||
use crate::function::{eat_call_args, eat_func_args, CallArgs, FuncArgs};
|
use crate::function::{eat_call_args, eat_func_args, CallArgs, FuncArgs};
|
||||||
use crate::selector::Selector;
|
use crate::selector::Selector;
|
||||||
use crate::utils::devour_whitespace;
|
use crate::utils::devour_whitespace;
|
||||||
@ -20,10 +20,10 @@ impl Mixin {
|
|||||||
Mixin { scope, args, body }
|
Mixin { scope, args, body }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_tokens<I: Iterator<Item = Token>>(
|
pub fn decl_from_tokens<I: Iterator<Item = Token>>(
|
||||||
toks: &mut Peekable<I>,
|
toks: &mut Peekable<I>,
|
||||||
scope: &Scope,
|
scope: &Scope,
|
||||||
) -> Result<(String, Mixin), Printer> {
|
) -> Result<(String, Mixin), (Pos, String)> {
|
||||||
let Token { pos, .. } = toks
|
let Token { pos, .. } = toks
|
||||||
.next()
|
.next()
|
||||||
.expect("this must exist because we have already peeked");
|
.expect("this must exist because we have already peeked");
|
||||||
@ -34,7 +34,7 @@ impl Mixin {
|
|||||||
..
|
..
|
||||||
}) => s,
|
}) => s,
|
||||||
_ => {
|
_ => {
|
||||||
return Err(Printer::Error(
|
return Err((
|
||||||
pos,
|
pos,
|
||||||
String::from("expected identifier after mixin declaration"),
|
String::from("expected identifier after mixin declaration"),
|
||||||
))
|
))
|
||||||
@ -50,7 +50,7 @@ impl Mixin {
|
|||||||
kind: TokenKind::Symbol(Symbol::OpenCurlyBrace),
|
kind: TokenKind::Symbol(Symbol::OpenCurlyBrace),
|
||||||
..
|
..
|
||||||
}) => FuncArgs::new(),
|
}) => FuncArgs::new(),
|
||||||
_ => return Err(Printer::Error(pos, String::from("expected `(` or `{`"))),
|
_ => return Err((pos, String::from("expected `(` or `{`"))),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut nesting = 1;
|
let mut nesting = 1;
|
||||||
@ -67,7 +67,7 @@ impl Mixin {
|
|||||||
}
|
}
|
||||||
body.push(tok)
|
body.push(tok)
|
||||||
} else {
|
} else {
|
||||||
return Err(Printer::Error(pos, String::from("unexpected EOF")));
|
return Err((pos, String::from("unexpected EOF")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user