Actually just three programming languages in a trenchcoat
1use super::*;
2use crate::{Parser, Spanned};
3use source_span::Span;
4use trilogy_scanner::{Token, TokenType::*};
5
6/// An end expression.
7///
8/// ```trilogy
9/// end
10/// ```
11#[derive(Clone, Debug)]
12pub struct EndExpression {
13 pub end: Token,
14 pub span: Span,
15}
16
17impl Spanned for EndExpression {
18 fn span(&self) -> Span {
19 self.span
20 }
21}
22
23impl EndExpression {
24 pub(crate) fn parse(parser: &mut Parser) -> SyntaxResult<Self> {
25 let end = parser.expect(KwEnd).unwrap();
26 Ok(Self {
27 span: end.span,
28 end,
29 })
30 }
31}
32
33#[cfg(test)]
34mod test {
35 use super::*;
36
37 test_parse!(endexpr_empty: "end" => EndExpression::parse => EndExpression { .. });
38 test_parse_error!(endexpr_value: "end unit" => EndExpression::parse);
39}