Actually just three programming languages in a trenchcoat
at string-repr-callable 38 lines 1.0 kB view raw
1use super::*; 2use crate::{Parser, Spanned}; 3use trilogy_scanner::{Token, TokenType::*}; 4 5#[derive(Clone, Debug, PrettyPrintSExpr)] 6pub struct SetComprehension { 7 pub open_bracket_pipe: Token, 8 pub expression: Expression, 9 pub query: Query, 10 pub close_bracket_pipe: Token, 11} 12 13impl Spanned for SetComprehension { 14 fn span(&self) -> source_span::Span { 15 self.open_bracket_pipe 16 .span 17 .union(self.close_bracket_pipe.span) 18 } 19} 20 21impl SetComprehension { 22 pub(crate) fn parse_rest( 23 parser: &mut Parser, 24 open_bracket_pipe: Token, 25 expression: Expression, 26 ) -> SyntaxResult<Self> { 27 let query = Query::parse(parser)?; 28 let close_bracket_pipe = parser 29 .expect(CBrackPipe) 30 .map_err(|token| parser.expected(token, "expected `|]` to end set comprehension"))?; 31 Ok(Self { 32 open_bracket_pipe, 33 expression, 34 query, 35 close_bracket_pipe, 36 }) 37 } 38}