tyml_parser/
lib.rs

1pub mod ast;
2pub mod error;
3pub mod formatter;
4pub mod lexer;
5pub mod parser;
6
7#[cfg(test)]
8mod test {
9    use allocator_api2::vec::Vec;
10    use bumpalo::Bump;
11    use tyml_formatter::GeneralFormatter;
12
13    use crate::{formatter::IntoFormatterToken, lexer::Lexer, parser::parse_defines};
14
15    static SOURCE: &'static str = r#"
16settings = {
17    ip: string @regex '\d+\.\d+\.\d+\.\d+' and ( @length 0..<10 )
18    port = 25565
19    mode = "Debug"
20}
21/* comment
22*/
23// comment
24/// Document1
25/// Document2
26test: {
27    mode: Mode
28}
29
30enum Mode {
31    "Debug"
32    "Release"
33}
34
35type Type {
36    test: int
37    test2: {
38        test: int
39    }
40}
41
42#[test = "aaa"]
43interface Test {
44    #[test = true]
45    function test(test1: Mode = "Debug") -> Type throws default: Type {
46        return {
47            test = 100,
48            test2 = {
49                test = 200
50            }
51        }
52    }
53}
54"#;
55
56    #[test]
57    fn parse_test() {
58        let mut lexer = Lexer::new(SOURCE);
59        let allocator = Bump::new();
60        let mut errors = Vec::new_in(&allocator);
61
62        let ast = parse_defines(&mut lexer, &mut errors, &allocator);
63        dbg!(ast);
64        dbg!(errors);
65    }
66
67    #[test]
68    fn formatter() {
69        let mut lexer = Lexer::new(SOURCE);
70        let allocator = Bump::new();
71        let mut errors = Vec::new_in(&allocator);
72        let ast = parse_defines(&mut lexer, &mut errors, &allocator);
73
74        let mut formatter = GeneralFormatter::new(
75            Lexer::new(SOURCE)
76                .enable_comment_token()
77                .into_formatter_token(ast)
78                .into_iter(),
79            25,
80        );
81        formatter.format();
82
83        println!("{}", formatter.generate_code());
84    }
85}