mod classfile;
pub mod index;
mod jvm;
mod macros;
mod versions;
use yog_data::Diagnostic;
pub use jvm::{JvmBuild, build_jar};
pub use macros::MacroLibrary;
pub use yog_script_analyze::versions::targeted;
#[must_use]
pub fn check_source(name: &str, text: &str) -> Vec<Diagnostic> {
check_source_with(name, text, index::load)
}
pub fn check_source_with(
name: &str,
text: &str,
load: impl Fn(&str) -> Result<index::ClassIndex, String>,
) -> Vec<Diagnostic> {
check_source_using(name, text, load, Project::default())
}
#[derive(Default, Clone, Copy)]
pub struct Project<'a> {
pub macros: Option<&'a MacroLibrary>,
pub to_server: bool,
}
pub fn check_source_using(
name: &str,
text: &str,
load: impl Fn(&str) -> Result<index::ClassIndex, String>,
project: Project<'_>,
) -> Vec<Diagnostic> {
let env = yog_script_analyze::Env {
game: None,
macros: project
.macros
.map(|m| m as &dyn yog_script_analyze::macros::ProcMacros),
to_server: project.to_server,
};
if !yog_script_analyze::is_nanites(name) {
return yog_script_analyze::check_in(name, text, env).problems;
}
versions::check(name, text, load, env)
}