castle_tokenizer/token_parsers/
parse_newline.rs

1use std::io::Read;
2
3use castle_input_cursor::{Cursor, Position, Span};
4use castle_types::CastleError;
5
6
7use crate::{Token, TokenKind};
8
9pub fn parse_newline(cursor: &mut Cursor<impl Read>, start: Position) -> Result<Token, CastleError> {
10    // peek the next char in a loop and coalesce all line terminators into a single newline token
11    loop {
12        match cursor.peek()? {
13            Some(b'\n' | b'\r') => cursor.next_byte()?,
14            _ => break Ok(Token::new(TokenKind::LineTerminator, Span::new(start, cursor.pos()))),
15        };
16    }
17}