summaryrefslogtreecommitdiff
path: root/support/texlab/src/features/formatting.rs
blob: 5d7d1c0c1fb4fefb8082a836ce023b66bb028769 (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
mod bibtex_internal;
mod latexindent;

use lsp_types::{FormattingOptions, TextEdit, Url};

use crate::{
    db::{Language, Workspace},
    BibtexFormatter, Db, LatexFormatter,
};

use self::{bibtex_internal::format_bibtex_internal, latexindent::format_with_latexindent};

pub fn format_source_code(
    db: &dyn Db,
    uri: &Url,
    options: &FormattingOptions,
) -> Option<Vec<TextEdit>> {
    let workspace = Workspace::get(db);
    let document = workspace.lookup_uri(db, uri)?;
    match document.language(db) {
        Language::Tex => match workspace.options(db).latex_formatter {
            LatexFormatter::None => None,
            LatexFormatter::Texlab => None,
            LatexFormatter::Latexindent => format_with_latexindent(db, document),
        },
        Language::Bib => match workspace.options(db).bibtex_formatter {
            BibtexFormatter::None => None,
            BibtexFormatter::Texlab => format_bibtex_internal(db, document, options),
            BibtexFormatter::Latexindent => format_with_latexindent(db, document),
        },
        Language::Log | Language::TexlabRoot | Language::Tectonic => None,
    }
}