#![doc = include_str!("readme.md")]
use crate::{Language, TextEdit, errors::OakDiagnostics};
mod cache;
mod scan_comment;
mod scan_identifier;
mod scan_number;
mod scan_string;
mod scan_white_space;
mod state;
mod token;
pub use cache::*;
pub use core::range::Range;
pub use scan_comment::*;
pub use scan_identifier::*;
pub use scan_number::*;
pub use scan_string::*;
pub use scan_white_space::*;
pub use state::*;
pub use token::*;
pub type LexOutput<L: Language> = OakDiagnostics<Tokens<L>>;
pub trait Lexer<L: Language + Send + Sync> {
fn lex<'a, S: crate::source::Source + ?Sized>(&self, text: &S, edits: &[TextEdit], cache: &'a mut impl LexerCache<L>) -> LexOutput<L>;
}