1use sim_codec::DecodeBudget;
2use sim_kernel::{CodecId, PrattToken, Result, Trivia};
3
4#[derive(Clone, Debug, PartialEq, Eq)]
6pub struct SpannedPrattToken {
7 pub token: PrattToken,
9 pub start: usize,
11 pub end: usize,
13 pub leading_trivia: Vec<Trivia>,
15}
16
17impl SpannedPrattToken {
18 pub fn new(token: PrattToken, start: usize, end: usize) -> Self {
20 Self {
21 token,
22 start,
23 end,
24 leading_trivia: Vec::new(),
25 }
26 }
27
28 pub fn with_leading_trivia(
30 token: PrattToken,
31 start: usize,
32 end: usize,
33 leading_trivia: Vec<Trivia>,
34 ) -> Self {
35 Self {
36 token,
37 start,
38 end,
39 leading_trivia,
40 }
41 }
42}
43
44pub trait PrattTokenSource: Send + Sync {
46 fn tokenize_pratt(
48 &self,
49 codec: CodecId,
50 source: &str,
51 budget: &mut DecodeBudget,
52 ) -> Result<Vec<SpannedPrattToken>>;
53}