use languageserver_types::{DocumentHighlight, TextDocumentPositionParams};
use super::*;
use completion;
pub fn register(io: &mut IoHandler, thread: &RootedThread) {
let thread = thread.clone();
let f = move |params: TextDocumentPositionParams| {
retrieve_expr(&thread, ¶ms.text_document.uri, |module| {
let expr = &module.expr;
let source = &module.source;
let byte_index = position_to_byte_index(&source, ¶ms.position)?;
let symbol_spans = completion::find_all_symbols(source.span(), expr, byte_index)
.map(|t| t.1)
.unwrap_or(Vec::new());
symbol_spans
.into_iter()
.map(|span| {
Ok(DocumentHighlight {
kind: None,
range: byte_span_to_range(&source, span)?,
})
})
.collect::<Result<_, _>>()
.map(Some)
})
};
io.add_async_method(request!("textDocument/documentHighlight"), f);
}