rue-parser 0.8.4

A parser for the Rue programming language.
Documentation
mod binding;
mod block;
mod document;
mod expr;
mod generics;
mod item;
mod stmt;
mod ty;

pub(crate) use document::document;

#[cfg(test)]
mod tests {
    use std::{path::Path, sync::Arc};

    use expect_test::Expect;
    use rue_diagnostic::{Source, SourceKind};
    use rue_lexer::Lexer;

    use crate::Parser;

    #[allow(clippy::needless_pass_by_value)]
    pub fn check(f: impl FnOnce(&mut Parser), source: &str, expect: Expect, errors: Expect) {
        let source = Source::new(Arc::from(source), SourceKind::File("main.rue".to_string()));

        let tokens = Lexer::new(&source.text).collect::<Vec<_>>();

        let mut parser = Parser::new(source, tokens);
        f(&mut parser);

        let result = parser.parse_raw();

        let output = format!("{:#?}", result.node);

        let mut error_output = String::new();

        for (i, error) in result.diagnostics.into_iter().enumerate() {
            if i != 0 {
                error_output.push('\n');
            }
            error_output.push_str(&error.message(Path::new(".")));
        }

        expect.assert_eq(&output);
        errors.assert_eq(&error_output);
    }
}