use core::fmt;
use gramatika::{DebugLisp, Span, Substr, Token, TokenStream};
#[derive(Token, DebugLispToken)]
pub enum Directive {
#[pattern = "#ifdef"]
IfDef(Substr, Span),
#[pattern = "#ifndef"]
IfNDef(Substr, Span),
#[pattern = "#if"]
If(Substr, Span),
#[pattern = "#else ifdef"]
ElseIfDef(Substr, Span),
#[pattern = "#else ifndef"]
ElseIfNDef(Substr, Span),
#[pattern = "#else if"]
ElseIf(Substr, Span),
#[pattern = "#else"]
Else(Substr, Span),
#[pattern = "#endif"]
Endif(Substr, Span),
}
impl fmt::Debug for Directive {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
DebugLisp::fmt(self, f, 0)
}
}
impl fmt::Display for Directive {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.lexeme())
}
}
pub type DirectiveLexer = TokenStream<Directive>;