#![allow(clippy::result_large_err)]
mod ast;
mod builtins;
mod check;
mod codegen;
mod complete;
mod diagnostics;
mod fmt;
mod keywords;
mod lexer;
mod manifest;
mod modules;
mod parser;
mod project;
mod stdlib;
mod token;
pub use ast::{
celled_locals, child_funcdefs, dump, free_names, hoisted_names, BinOp, Expr, InterpPart, Param,
Params, Script, Stmt, UnOp,
};
pub use builtins::{builtin, is_builtin, BuiltinFn, BuiltinShape, BUILTINS};
pub use check::{check_snippet, ClassInfo, SessionScope};
pub use complete::{complete, Completion, CompletionKind};
pub use diagnostics::Diagnostic;
pub use manifest::{Dependency, DependencySource, GitRev, Manifest, MANIFEST_NAME};
pub use modules::{
load_program, load_program_with_deps, single_file_program, Program, ProgramFile,
};
pub use parser::{parse_repl, ReplParse};
pub use project::{discover_root, read_manifest, resolve_project, DependencyMap};
pub use stdlib::{module as stdlib_module, Module, ModuleFn, MODULES};
pub use token::Span;
pub fn parse(path: &str, source: &str) -> Result<Script, Diagnostic> {
parser::parse(path, source)
}
pub fn check(path: &str, source: &str, script: &Script) -> Result<(), Diagnostic> {
check::check(path, source, script)
}
pub fn format(path: &str, source: &str) -> Result<String, Diagnostic> {
fmt::format(path, source)
}
pub fn generate(path: &str, source: &str, script: &Script) -> Result<String, Diagnostic> {
let program = modules::single_file_program(path, source, script.clone())?;
codegen::generate_program(&program)
}
pub fn load(entry_path: &str, entry_source: &str) -> Result<Program, Diagnostic> {
modules::load_program(entry_path, entry_source)
}
pub fn check_program(program: &Program) -> Result<(), Diagnostic> {
check::check_program(program)
}
pub fn generate_program(program: &Program) -> Result<String, Diagnostic> {
codegen::generate_program(program)
}