luau-syntax 0.732.0

Luau lexer, parser, AST, CST, and source utilities
Documentation
mod if_else;
mod literals;
mod type_assertions;

use crate::common::*;

fn with_first_local_value<R>(source: &str, f: impl for<'ast> FnOnce(Expression<'ast>) -> R) -> R {
    with_parse(source, ParseOptions::default(), |result| {
        let result = result.unwrap();
        let [statement] = statement_kinds(result.root.as_slice()).exact();
        let local = statement.as_local().expect("expected local statement");
        f(local.values[0])
    })
}

fn with_first_return_value<R>(source: &str, f: impl for<'ast> FnOnce(Expression<'ast>) -> R) -> R {
    with_parse(source, ParseOptions::default(), |result| {
        let result = result.unwrap();
        let [statement] = statement_kinds(result.root.as_slice()).exact();
        let return_statement = statement.as_return().expect("expected return statement");
        assert_eq!(return_statement.expressions.len(), 1);
        f(return_statement.expressions[0])
    })
}