pub fn summarize_rust_lexical(document: &Document) -> CodeFileSummaryExpand description
Builds a deterministic, line-oriented Rust symbol summary.
Only trimmed lines beginning exactly with use , fn , struct , enum ,
or trait are recognized, so visibility/modifier prefixes are ignored.
Symbols have no parents/signatures/docs and use one-based IDs. One root
containment/import edge is emitted per symbol. Calls are textually detected
as name( outside the symbol’s own name range, at most once per function,
with root ID zero as caller; comments/strings can cause false positives.
§Examples
use ailloli_ui_editor::{code::symbols::summarize_rust_lexical, Document, DocumentId, EditorLanguage, SymbolEdgeKind, SymbolKind};
use ailloli_ui_text::TextBuffer;
let document = Document::new(DocumentId(1), TextBuffer::from_string("struct App;\nfn run() {}\nfn main() { run(); }")) .with_language(EditorLanguage::Rust);
let summary = summarize_rust_lexical(&document);
assert!(summary.symbols.iter().any(|s| s.kind == SymbolKind::Struct && s.name == "App"));
assert!(summary.edges.iter().any(|e| e.kind == SymbolEdgeKind::Calls));