Implement Find All References for local variables

This commit is contained in:
Jeremy A. Kolb 2018-10-18 13:40:12 -04:00
parent 2a704035f4
commit 3746689e9d
8 changed files with 96 additions and 3 deletions

View file

@ -27,7 +27,7 @@ pub fn server_capabilities() -> ServerCapabilities {
definition_provider: Some(true),
type_definition_provider: None,
implementation_provider: None,
references_provider: None,
references_provider: Some(true),
document_highlight_provider: None,
document_symbol_provider: Some(true),
workspace_symbol_provider: Some(true),

View file

@ -460,6 +460,22 @@ pub fn handle_signature_help(
}
}
pub fn handle_references(
world: ServerWorld,
params: req::ReferenceParams,
token: JobToken,
) -> Result<Option<Vec<Location>>> {
let file_id = params.text_document.try_conv_with(&world)?;
let line_index = world.analysis().file_line_index(file_id);
let offset = params.position.conv_with(&line_index);
let refs = world.analysis().find_all_refs(file_id, offset, &token);
Ok(Some(refs.into_iter()
.filter_map(|r| to_location(r.0, r.1, &world, &line_index).ok())
.collect()))
}
pub fn handle_code_action(
world: ServerWorld,
params: req::CodeActionParams,

View file

@ -248,6 +248,7 @@ fn on_request(
.on::<req::CodeActionRequest>(handlers::handle_code_action)?
.on::<req::FoldingRangeRequest>(handlers::handle_folding_range)?
.on::<req::SignatureHelpRequest>(handlers::handle_signature_help)?
.on::<req::References>(handlers::handle_references)?
.finish();
match req {
Ok((id, handle)) => {

View file

@ -7,7 +7,7 @@ pub use languageserver_types::{
CompletionResponse, DocumentOnTypeFormattingParams, DocumentSymbolParams,
DocumentSymbolResponse, ExecuteCommandParams, Hover, InitializeResult,
PublishDiagnosticsParams, SignatureHelp, TextDocumentEdit, TextDocumentPositionParams,
TextEdit, WorkspaceSymbolParams,
TextEdit, WorkspaceSymbolParams, ReferenceParams,
};
pub enum SyntaxTree {}