rune/ast/
local.rs
1use crate::ast::prelude::*;
2
3#[test]
4#[cfg(not(miri))]
5fn ast_parse() {
6 rt::<ast::Local>("let x = 1;");
7 rt::<ast::Local>("#[attr] let a = f();");
8 rt::<ast::Local>("let a = b{}().foo[0].await;");
9}
10
11#[derive(Debug, TryClone, PartialEq, Eq, ToTokens, Parse, Spanned)]
15#[non_exhaustive]
16pub struct Local {
17 #[rune(iter, meta)]
19 pub attributes: Vec<ast::Attribute>,
20 pub let_token: T![let],
22 #[rune(iter)]
24 pub mut_token: Option<T![mut]>,
25 pub pat: ast::Pat,
27 pub eq: T![=],
29 #[rune(parse_with = "parse_expr")]
31 pub expr: ast::Expr,
32 pub semi: T![;],
34}
35
36fn parse_expr(p: &mut Parser<'_>) -> Result<ast::Expr> {
37 ast::Expr::parse_with(
38 p,
39 ast::expr::EAGER_BRACE,
40 ast::expr::EAGER_BINARY,
41 ast::expr::CALLABLE,
42 )
43}