wgsl-parser 0.5.0

A zero-copy recursive-descent parser for WebGPU shading language
Documentation
mod comment;
mod common;
mod decl;
mod e2e;
mod error_recovery;
mod expr;
mod lexer;
mod scopes;
mod stmt;
mod traversal;
mod utils;

#[cfg(feature = "preprocessing")]
mod preprocessing;

use similar::{ChangeTag, TextDiff};
use std::fmt::Write;

fn diff(a: &str, b: &str) -> String {
	let diff = TextDiff::from_lines(a, b);

	diff.iter_all_changes()
		.fold(String::new(), |mut accum, change| {
			let sign = match change.tag() {
				ChangeTag::Insert => "+",
				ChangeTag::Delete => "-",
				ChangeTag::Equal => " ",
			};

			let _ = write!(accum, "{}{}", sign, change);
			accum
		})
}

macro_rules! token {
	($Variant:ident $lexeme:literal $($span:tt)+) => {
		$crate::token::Token::$Variant(
			::gramatika::arcstr::literal_substr!($lexeme),
			token!($($span)+),
		)
	};
	(($start_line:literal : $start_char:literal .. $end_line:literal : $end_char:literal)) => {
		::gramatika::Span::new(($start_line-1, $start_char-1), ($end_line-1, $end_char-1))
	};
}

use token;