use syster::hir::TypeRefKind;
use syster::ide::AnalysisHost;
fn get_test_file_content() -> &'static str {
include_str!("sysml-examples/Vehicle Example/SysML v2 Spec Annex A SimpleVehicleModel.sysml")
}
#[test]
fn test_debug_interface_endpoint_chain() {
let mut host = AnalysisHost::new();
let content = get_test_file_content();
let file_uri = "test/SimpleVehicleModel.sysml";
host.set_file_content(file_uri, content);
let analysis = host.analysis();
let index = analysis.symbol_index();
let test_line = 1000u32; let test_col = 55u32;
println!("\n=== Looking for symbols containing the chain ===");
for sym in index.all_symbols() {
for trk in &sym.type_refs {
match trk {
TypeRefKind::Chain(chain) => {
let names: Vec<&str> = chain.parts.iter().map(|p| p.target.as_ref()).collect();
if names.contains(&"lugNutPort1") {
println!("Found chain {:?} on symbol:", names);
println!(" Symbol: {} ({:?})", sym.qualified_name, sym.kind);
println!(" Symbol line: {}", sym.start_line);
for (i, part) in chain.parts.iter().enumerate() {
println!(
" Part {}: '{}' resolved={:?} kind={:?}",
i, part.target, part.resolved_target, part.kind
);
}
}
}
TypeRefKind::Simple(tr) => {
if tr.target.contains("lugNutPort1") {
println!("Found simple ref containing 'lugNutPort1':");
println!(" Symbol: {} ({:?})", sym.qualified_name, sym.kind);
println!(
" Target: '{}' resolved={:?}",
tr.target, tr.resolved_target
);
}
}
}
}
}
let file_id = analysis.get_file_id(file_uri).expect("file should exist");
println!(
"\n=== Hovering at line {} col {} ===",
test_line + 1,
test_col
);
let hover = analysis.hover(file_id, test_line, test_col);
println!("Hover result: {:?}", hover);
let test_col_first = 37u32; println!(
"\n=== Hovering at line {} col {} (first part) ===",
test_line + 1,
test_col_first
);
let hover2 = analysis.hover(file_id, test_line, test_col_first);
println!("Hover result: {:?}", hover2);
println!("\n=== Looking for lugNutPort1 definition ===");
for sym in index.all_symbols() {
if sym.name.as_ref() == "lugNutPort1" {
println!(
" {} ({:?}) at line {}",
sym.qualified_name, sym.kind, sym.start_line
);
}
}
}