kotlin_parser/parse/expression/
for_expr.rs1use crate::ast::*;
2use chumsky::prelude::*;
3
4use super::call::{block_parser, vars_parser};
5
6pub fn for_expr_parser(
7 stmt_parser: impl Parser<char, Statement, Error = Simple<char>> + Clone,
8 expr_parser: impl Parser<char, Expression, Error = Simple<char>> + Clone,
9) -> impl Parser<char, Expression, Error = Simple<char>> {
10 just("for")
11 .padded()
12 .ignore_then(
13 vars_parser()
14 .then_ignore(just("in").padded())
15 .then(expr_parser)
16 .delimited_by(just('(').padded(), just(')').padded()),
17 )
18 .then(block_parser(stmt_parser))
19 .map(|((vars, expr), body)| {
20 Expression::For(ForExpression {
21 vars,
22 iterable: expr.into(),
23 body,
24 })
25 })
26}