kotlin_parser/parse/expression/
for_expr.rs

1use 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}