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}