tyml_parser 0.1.9

TYML: type checker for markup language
Documentation
pub mod ast;
pub mod error;
pub mod formatter;
pub mod lexer;
pub mod parser;

#[cfg(test)]
mod test {
    use allocator_api2::vec::Vec;
    use bumpalo::Bump;
    use tyml_formatter::GeneralFormatter;

    use crate::{formatter::IntoFormatterToken, lexer::Lexer, parser::parse_defines};

    static SOURCE: &'static str = r#"
settings = {
    ip: string @regex '\d+\.\d+\.\d+\.\d+' and ( @length 0..<10 )
    port = 25565
    mode = "Debug"
}
/* comment
*/
// comment
/// Document1
/// Document2
test: {
    mode: Mode
}

enum Mode {
    "Debug"
    "Release"
}

type Type {
    test: int
    test2: {
        test: int
    }
}

#[test = "aaa"]
interface Test {
    #[test = true]
    function test(test1: Mode = "Debug") -> Type throws default: Type {
        return {
            test = 100,
            test2 = {
                test = 200
            }
        }
    }
}
"#;

    #[test]
    fn parse_test() {
        let mut lexer = Lexer::new(SOURCE);
        let allocator = Bump::new();
        let mut errors = Vec::new_in(&allocator);

        let ast = parse_defines(&mut lexer, &mut errors, &allocator);
        dbg!(ast);
        dbg!(errors);
    }

    #[test]
    fn formatter() {
        let mut lexer = Lexer::new(SOURCE);
        let allocator = Bump::new();
        let mut errors = Vec::new_in(&allocator);
        let ast = parse_defines(&mut lexer, &mut errors, &allocator);

        let mut formatter = GeneralFormatter::new(
            Lexer::new(SOURCE)
                .enable_comment_token()
                .into_formatter_token(ast)
                .into_iter(),
            25,
        );
        formatter.format();

        println!("{}", formatter.generate_code());
    }
}