diff --git a/crates/fuse-parser/src/parsers/expressions.rs b/crates/fuse-parser/src/parsers/expressions.rs index 3ddef9f..9e5a24c 100644 --- a/crates/fuse-parser/src/parsers/expressions.rs +++ b/crates/fuse-parser/src/parsers/expressions.rs @@ -43,6 +43,7 @@ impl<'a> Parser<'a> { let token = self.consume(); println!("{token:?}, {:?}", self.cur_kind()); let params = self.parse_function_parameters()?; + let end = self.consume_expect(TokenKind::End); Ok(Function { span: self.end_span(start), params, diff --git a/crates/fuse-parser/tests/cases/pass/function-expression-01/ast.snap b/crates/fuse-parser/tests/cases/pass/function-expression-01/ast.snap new file mode 100644 index 0000000..f550aa2 --- /dev/null +++ b/crates/fuse-parser/tests/cases/pass/function-expression-01/ast.snap @@ -0,0 +1,29 @@ +--- +source: crates/fuse-parser/tests/cases/mod.rs +expression: parsed.chunk +input_file: crates/fuse-parser/tests/cases/pass/function-expression-01/case.fuse +--- +Some(Chunk( + span: Span( + start: 0, + end: 16, + ), + body: Block( + statements: [ + Expression(Function(Function( + span: Span( + start: 0, + end: 15, + ), + params: FunctionParameters( + span: Span( + start: 9, + end: 11, + ), + items: [], + rest: None, + ), + ))), + ], + ), +)) diff --git a/crates/fuse-parser/tests/cases/pass/function-expression-01/tokens.snap b/crates/fuse-parser/tests/cases/pass/function-expression-01/tokens.snap new file mode 100644 index 0000000..49c9a82 --- /dev/null +++ b/crates/fuse-parser/tests/cases/pass/function-expression-01/tokens.snap @@ -0,0 +1,75 @@ +--- +source: crates/fuse-parser/tests/cases/mod.rs +expression: tokens +input_file: crates/fuse-parser/tests/cases/pass/function-expression-01/case.fuse +--- +[ + TokenReference( + token: Token( + span: Span( + start: 0, + end: 8, + ), + kind: Function, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 8, + end: 9, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 9, + end: 10, + ), + kind: LParen, + ), + leading_trivia: [], + trailing_trivia: [], + ), + TokenReference( + token: Token( + span: Span( + start: 10, + end: 11, + ), + kind: RParen, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 11, + end: 12, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 12, + end: 15, + ), + kind: End, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 15, + end: 16, + ), + kind: Whitespace, + ), + ], + ), +]