use gdscript_base::{FileId, FilePosition};
use gdscript_ide::{AnalysisHost, Change};
fn main() {
let src = "\
extends Node
func ratio() -> int:
var halves := 10 / 4
return halves
";
let file = FileId(0);
let mut host = AnalysisHost::new();
let mut change = Change::new();
change.change_file(file, src);
change.set_file_path(file, "res://ratio.gd");
host.apply_change(change);
let analysis = host.analysis();
println!("diagnostics:");
for d in analysis.diagnostics(file).expect("not cancelled") {
println!(
" [{:?}] {} ({}..{}) — {}",
d.severity, d.code, d.range.start, d.range.end, d.message
);
}
let offset = u32::try_from(src.find("halves :=").expect("present")).expect("fits u32");
if let Some(h) = analysis
.hover(FilePosition { file, offset })
.expect("not cancelled")
{
println!(
"\nhover @ `halves`: {}",
h.ty_label.as_deref().unwrap_or("<none>")
);
}
println!("\nsymbols:");
for sym in analysis.document_symbols(file).expect("not cancelled") {
println!(" {:?} {}", sym.kind, sym.name);
}
if let Some(formatted) = analysis.format(file).expect("not cancelled") {
println!("\nformatted:\n{formatted}");
}
}