wgsl-parser 0.5.0

A zero-copy recursive-descent parser for WebGPU shading language
Documentation
use core::fmt;

use gramatika::{DebugLisp, Span, Substr, Token as _, TokenStream};

#[derive(Token, DebugLispToken)]
pub enum Chunk {
	#[pattern = r"[ \t]*#define .+"]
	Definition(Substr, Span),

	#[pattern = r"[ \t]*#if(n?def)? .+"]
	BranchStart(Substr, Span),

	#[pattern = r"[ \t]*#else .+"]
	#[pattern = r"[ \t]*#else"]
	BranchFork(Substr, Span),

	#[pattern = r"[ \t]*#endif .+"]
	#[pattern = r"[ \t]*#endif"]
	BranchEnd(Substr, Span),

	#[pattern = r".+"]
	Line(Substr, Span),
}

pub type Lexer = TokenStream<Chunk>;

impl fmt::Debug for Chunk {
	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
		DebugLisp::fmt(self, f, 0)
	}
}

impl fmt::Display for Chunk {
	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
		write!(f, "{}", self.lexeme())
	}
}