Files
nx_post_support/server/crates/features/src/document_symbol.rs
T
2025-09-07 07:18:18 +02:00

35 lines
921 B
Rust

use anyhow::Result;
use analysis::ProcIndex;
use lsp_types as lsp;
use text::DocumentStore;
pub fn document_symbol(
docs: &DocumentStore,
index: &ProcIndex,
uri: &lsp::Uri
) -> Result<Option<lsp::DocumentSymbolResponse>> {
let Some(doc) = docs.get(uri) else {
return Ok(None);
};
let Some(procs) = index.get(uri) else {
return Ok(None);
};
let mut symbols = Vec::new();
for p in procs {
let range = doc.byte_range_to_lsp_range(p.byte_start, p.byte_end);
symbols.push(lsp::DocumentSymbol {
name: p.name.clone(),
detail: Some(format!("proc {}", p.params.join(" "))),
kind: lsp::SymbolKind::FUNCTION,
range,
selection_range: range,
children: None,
tags: None,
deprecated: None,
});
}
Ok(Some(lsp::DocumentSymbolResponse::Nested(symbols)))
}