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}