summaryrefslogtreecommitdiff
path: root/support/texlab/crates/syntax/src/lib.rs
blob: c2c0552652ab732b38a2815f58bacd82d345ad72 (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
pub mod bibtex;
pub mod latex;

#[derive(Debug, PartialEq, Eq, Clone, Copy, PartialOrd, Ord, Hash)]
pub enum BuildErrorLevel {
    Error,
    Warning,
}

#[derive(Debug, PartialEq, Eq, Clone, Hash)]
pub struct BuildError {
    pub relative_path: std::path::PathBuf,
    pub level: BuildErrorLevel,
    pub message: String,
    pub hint: Option<String>,
    pub line: Option<u32>,
}

#[derive(Debug, PartialEq, Eq, Clone, Hash)]
pub struct BuildLog {
    pub errors: Vec<BuildError>,
}

#[macro_export]
macro_rules! match_ast {
    (match $node:ident { $($tt:tt)* }) => { $crate::match_ast!(match ($node) { $($tt)* }) };

    (match ($node:expr) {
        $( $( $path:ident )::+ ($it:pat) => $res:expr, )*
        _ => $catch_all:expr $(,)?
    }) => {{
        $( if let Some($it) = $($path::)+cast($node.clone()) { $res } else )*
        { $catch_all }
    }};
}