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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
pub mod r#type;
pub mod ast;
pub mod parser;
mod builtin;
pub(crate) mod resolver;
pub mod diagnostics;
pub mod utils;
pub(crate) mod completion;
pub(crate) mod definition;
pub mod search;
pub mod traits;
pub mod availability;
pub mod expr;
pub mod format;
pub mod value;
#[macro_use]
pub mod macros;

use std::collections::BTreeMap;
use crate::ast::schema::Schema;
use crate::completion::completion_item::CompletionItem;
use crate::definition::definition::Definition;
use crate::diagnostics::diagnostics::Diagnostics;
use crate::diagnostics::formatter::format_to_json;
use crate::utils::path::FileUtility;

pub fn parse(
    main: impl AsRef<str>,
    mut file_util: Option<FileUtility>,
    unsaved_files: Option<BTreeMap<String, String>>,
) -> (Schema, Diagnostics) {
    if file_util.is_none() {
        file_util = Some(FileUtility::default());
    }
    let (schema, mut diagnostics) = parser::parse::parse(
        main,
        file_util.unwrap(),
        unsaved_files,
    );
    resolver::resolve::resolve(&schema, &mut diagnostics);
    (schema, diagnostics)
}

pub fn print_to_terminal(diagnostics: &Diagnostics) {
    diagnostics::printer::print_diagnostics(diagnostics, true);
}

pub fn generate_json_diagnostics(diagnostics: &Diagnostics, include_warnings: bool) -> String {
    format_to_json(diagnostics, include_warnings)
}

pub fn jump_to_definition(schema: &Schema, file_path: &str, line_col: (usize, usize)) -> Vec<Definition> {
    definition::jump_to_definition::jump_to_definition(schema, file_path, line_col)
}

pub fn auto_complete_items(schema: &Schema, file_path: &str, line_col: (usize, usize)) -> Vec<CompletionItem> {
    completion::find_completion::find_completion(schema, file_path, line_col)
}

pub fn format_document(schema: &Schema, file_path: &str) -> String {
    format::format::format_document(schema, file_path)
}