summaryrefslogtreecommitdiff
path: root/src/syntax/parsing.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-01-18 15:58:36 +0100
committerLaurenz <laurmaedje@gmail.com>2020-01-18 15:58:36 +0100
commit277f2d2176f5e98305870f90b16af3feae1bb3d1 (patch)
treea267216f67ebed87cbf83f021bfb01e9b79feae4 /src/syntax/parsing.rs
parent70878885f5d169f2c5d9e66d3919ee56d5f9f9ca (diff)
ColorToken serialization + function fix 🚧
Diffstat (limited to 'src/syntax/parsing.rs')
-rw-r--r--src/syntax/parsing.rs12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/syntax/parsing.rs b/src/syntax/parsing.rs
index 71d6b251..f6d0b629 100644
--- a/src/syntax/parsing.rs
+++ b/src/syntax/parsing.rs
@@ -104,8 +104,11 @@ impl<'s> Parser<'s> {
let name = self.parse_func_name()?;
self.skip_whitespace();
- let args = match self.eat() {
- Some(Spanned { v: Colon, .. }) => self.parse_func_args(),
+ let args = match self.peek() {
+ Some(Spanned { v: Colon, .. }) => {
+ self.eat();
+ self.parse_func_args()
+ }
Some(Spanned { v: RightBracket, .. }) => FuncArgs::new(),
other => {
self.expected_at("colon or closing bracket", name.span.end);
@@ -119,8 +122,9 @@ impl<'s> Parser<'s> {
/// Parses the function name if is the next token. Otherwise, it adds an
/// error and returns `None`.
fn parse_func_name(&mut self) -> Option<Spanned<Ident>> {
- match self.eat() {
+ match self.peek() {
Some(Spanned { v: ExprIdent(ident), span }) => {
+ self.eat();
self.colorization.replace_last(ColorToken::FuncName);
return Some(Spanned { v: Ident(ident.to_string()), span });
}
@@ -280,7 +284,7 @@ impl<'s> Parser<'s> {
None
})?;
- Some(FuncCall(parser(header, body, self.ctx).unwrap()))
+ parser(header, body, self.ctx).ok().map(|f| FuncCall(f))
}
/// Skip all whitespace/comment tokens.