1#![allow(clippy::result_large_err)]
2
3mod ast;
4mod builtins;
5mod check;
6mod codegen;
7mod complete;
8mod diagnostics;
9mod fmt;
10mod keywords;
11mod lexer;
12mod manifest;
13mod modules;
14mod parser;
15mod project;
16mod stdlib;
17mod token;
18
19pub use ast::{
20 celled_locals, child_funcdefs, dump, free_names, hoisted_names, BinOp, Expr, InterpPart, Param,
21 Params, Script, Stmt, UnOp,
22};
23pub use builtins::{builtin, is_builtin, BuiltinFn, BuiltinShape, BUILTINS};
24pub use check::{check_snippet, ClassInfo, SessionScope};
25pub use complete::{complete, Completion, CompletionKind};
26pub use diagnostics::Diagnostic;
27pub use manifest::{Dependency, DependencySource, GitRev, Manifest, MANIFEST_NAME};
28pub use modules::{
29 load_program, load_program_with_deps, single_file_program, Program, ProgramFile,
30};
31pub use parser::{parse_repl, ReplParse};
32pub use project::{discover_root, read_manifest, resolve_project, DependencyMap};
33pub use stdlib::{module as stdlib_module, Module, ModuleFn, MODULES, PACK_ZOOM_RUNTIME_FN};
34pub use token::Span;
35
36pub fn parse(path: &str, source: &str) -> Result<Script, Diagnostic> {
38 parser::parse(path, source)
39}
40
41pub fn check(path: &str, source: &str, script: &Script) -> Result<(), Diagnostic> {
43 check::check(path, source, script)
44}
45
46pub fn format(path: &str, source: &str) -> Result<String, Diagnostic> {
50 fmt::format(path, source)
51}
52
53pub fn generate(path: &str, source: &str, script: &Script) -> Result<String, Diagnostic> {
56 let program = modules::single_file_program(path, source, script.clone())?;
57 codegen::generate_program(&program)
58}
59
60pub fn load(entry_path: &str, entry_source: &str) -> Result<Program, Diagnostic> {
62 modules::load_program(entry_path, entry_source)
63}
64
65pub fn check_program(program: &Program) -> Result<(), Diagnostic> {
67 check::check_program(program)
68}
69
70pub fn generate_program(program: &Program) -> Result<String, Diagnostic> {
72 codegen::generate_program(program)
73}