Allow field access on 'else'.

This commit is contained in:
KtorZ 2024-08-31 00:01:46 +02:00
parent 7aefa85de1
commit fed464278d
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
1 changed files with 20 additions and 5 deletions

View File

@ -1,16 +1,16 @@
use chumsky::prelude::*;
use super::Chain; use super::Chain;
use crate::{ use crate::{
expr::UntypedExpr, expr::UntypedExpr,
parser::{token::Token, ParseError}, parser::{token::Token, ParseError},
}; };
use chumsky::prelude::*;
pub(crate) fn parser() -> impl Parser<Token, Chain, Error = ParseError> { pub(crate) fn parser() -> impl Parser<Token, Chain, Error = ParseError> {
just(Token::Dot) just(Token::Dot)
.ignore_then(select! { .ignore_then(choice((
Token::Name { name } => name, select! { Token::Else => "else".to_string() },
}) select! { Token::Name { name } => name, },
)))
.map_with_span(Chain::FieldAccess) .map_with_span(Chain::FieldAccess)
} }
@ -28,3 +28,18 @@ pub(crate) fn constructor() -> impl Parser<Token, UntypedExpr, Error = ParseErro
}), }),
}) })
} }
#[cfg(test)]
mod tests {
use crate::assert_expr;
#[test]
fn field_access_else_1() {
assert_expr!("foo.else");
}
#[test]
fn field_access_else_2() {
assert_expr!("foo.bar.else");
}
}