use super::LexerState;
use crate::{
Language,
source::{SimdScanner, Source},
};
pub struct WhitespaceConfig {
pub unicode_whitespace: bool,
}
impl WhitespaceConfig {
pub fn scan<S: Source + ?Sized, L: Language>(&self, state: &mut LexerState<S, L>, kind: L::TokenType) -> bool {
let start = state.get_position();
let range = if self.unicode_whitespace { state.take_while(|c| c.is_whitespace()) } else { state.skip_ascii_whitespace() };
if range.end > start {
state.add_token(kind, start, range.end);
true
}
else {
false
}
}
}
#[inline]
#[allow(dead_code)]
pub fn count_space_tab_prefix(bytes: &[u8]) -> usize {
SimdScanner::skip_two_bytes(bytes, b' ', b'\t')
}