#![allow(clippy::print_stdout)]
use std::path::PathBuf;
use std::process::ExitCode;
use lean_rs::{LeanResult, LeanRuntime};
use lean_rs_host::LeanHost;
fn main() -> ExitCode {
install_tracing();
match run() {
Ok(()) => {
println!("ok");
ExitCode::SUCCESS
}
Err(err) => {
eprintln!("[{}] {err}", err.code());
ExitCode::FAILURE
}
}
}
fn install_tracing() {
let filter = tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("warn"));
let _result = tracing_subscriber::fmt()
.with_env_filter(filter)
.with_span_events(tracing_subscriber::fmt::format::FmtSpan::NEW)
.try_init();
}
fn run() -> LeanResult<()> {
let runtime = LeanRuntime::init()?;
let host = LeanHost::from_lake_project(runtime, lake_project_root())?;
let caps = host.load_capabilities("lean_rs_fixture", "LeanRsFixture")?;
let mut session = caps.session(&["LeanRsFixture.Handles"])?;
let names = session.list_declarations()?;
println!("total_declarations={}", names.len());
for name in ["Nat.add", "Nat.add_zero"] {
let kind = session.declaration_kind(name)?;
let rendered = session.declaration_name(name)?;
println!("{name}: kind={kind} rendered={rendered}");
}
Ok(())
}
fn lake_project_root() -> PathBuf {
let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
manifest_dir.parent().and_then(std::path::Path::parent).map_or_else(
|| PathBuf::from("fixtures/lean"),
|workspace| workspace.join("fixtures").join("lean"),
)
}