aboutsummaryrefslogtreecommitdiff
path: root/code/src/syntax_highlight/grammar.rs
blob: dad2eec466bb70ad8e6ca9700ce36019053fe041 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
pub fn grammar_for(syntax: &str) -> &'static [(&'static str, &'static [&'static str])] {
    match syntax {
        "rs" => &[
            (
                "keyword",
                &[
                    "fn", "pub", "async", "return", "if", "else", "let", "for", "while", "loop",
                    "impl", "for", "trait", "struct", "enum",
                ],
            ),
            (
                "type",
                &[
                    "[A-Z][a-z]*",
                    "bool",
                    "usize",
                    "u8",
                    "u16",
                    "u32",
                    "u64",
                    "u128",
                    "i8",
                    "i16",
                    "i32",
                    "i64",
                    "i128",
                    "isize",
                    "f32",
                    "f64",
                ],
            ),
            ("comment", &["(?m)(//.*)$", "(?ms)/\\*.*?\\*/"]),
            ("macro", &["([a-z_][A-Za-z0-9_]*!)\\s*"]),
            ("identifier", &["([a-z_][A-Za-z0-9_]*)\\s*\\("]),
            ("literal", &["\".*?\"", "\\d", "true", "false"]),
        ],
        "tree" => &[("keyword", &["[├─└│]+"])],
        // makefile doesnt really match the token-kinds, i'll just use something that looks goo
        "makefile" => &[
            ("comment", &["(?m)(#.*)$"]),
            ("literal", &[".+:"]),
            ("macro", &["\\$\\(\\w+\\)"]),
            ("type", &["\\$@", "\\$<"]),
        ],
        _ => &[],
    }
}