summaryrefslogtreecommitdiff
path: root/support/texlab/src/syntax/latex/analysis.rs
blob: 063d8e95f3b2cef366a50a937e557766400554fe (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
mod command;
mod distro_file;
mod environment;
mod explicit_link;
mod implicit_link;
mod label_name;
mod label_number;
mod theorem;
mod types;

use crate::syntax::latex;

pub use self::types::*;
use self::{
    command::analyze_command,
    environment::analyze_begin,
    explicit_link::{analyze_import, analyze_include},
    implicit_link::analyze_implicit_links,
    label_name::analyze_label_name,
    label_number::analyze_label_number,
    theorem::analyze_theorem_definition,
};

pub fn analyze(context: &mut LatexAnalyzerContext, root: &latex::SyntaxNode) {
    analyze_implicit_links(context);
    for node in root.descendants() {
        analyze_command(context, node)
            .or_else(|| analyze_begin(context, node))
            .or_else(|| analyze_include(context, node))
            .or_else(|| analyze_import(context, node))
            .or_else(|| analyze_label_name(context, node))
            .or_else(|| analyze_label_number(context, node))
            .or_else(|| analyze_theorem_definition(context, node));
    }
    context.extras.has_document_environment = context.extras.environment_names.contains("document");
}