use crate::{input::Input, lexer::Token, parser::State, position::SourceSpan, Position};
pub trait Context<'i, I: Input + ?Sized, S: State, TK>: Default {
fn state(&self) -> S;
fn set_state(&mut self, state: S);
fn position(&self) -> Position;
fn set_position(&mut self, position: Position);
fn span(&self) -> SourceSpan;
fn set_span(&mut self, span: SourceSpan);
fn token_ahead(&self) -> Option<&Token<'i, I, TK>>;
fn set_token_ahead(&mut self, token: Token<'i, I, TK>);
fn layout_ahead(&self) -> Option<&'i I>;
fn set_layout_ahead(&mut self, layout: Option<&'i I>);
}