use sim_codec::DecodeBudget;
use sim_kernel::{CodecId, PrattToken, Result, Trivia};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct SpannedPrattToken {
pub token: PrattToken,
pub start: usize,
pub end: usize,
pub leading_trivia: Vec<Trivia>,
}
impl SpannedPrattToken {
pub fn new(token: PrattToken, start: usize, end: usize) -> Self {
Self {
token,
start,
end,
leading_trivia: Vec::new(),
}
}
pub fn with_leading_trivia(
token: PrattToken,
start: usize,
end: usize,
leading_trivia: Vec<Trivia>,
) -> Self {
Self {
token,
start,
end,
leading_trivia,
}
}
}
pub trait PrattTokenSource: Send + Sync {
fn tokenize_pratt(
&self,
codec: CodecId,
source: &str,
budget: &mut DecodeBudget,
) -> Result<Vec<SpannedPrattToken>>;
}