mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 06:11:35 +00:00
Basic resolution for ADT
This commit is contained in:
parent
a094d5c621
commit
7125192c1e
5 changed files with 99 additions and 2 deletions
|
@ -2,7 +2,7 @@ use lsp_types::{
|
|||
CodeActionProviderCapability, CodeLensOptions, CompletionOptions, DocumentOnTypeFormattingOptions,
|
||||
ExecuteCommandOptions, FoldingRangeProviderCapability, RenameOptions, RenameProviderCapability,
|
||||
ServerCapabilities, SignatureHelpOptions, TextDocumentSyncCapability, TextDocumentSyncKind,
|
||||
TextDocumentSyncOptions, ImplementationProviderCapability, GenericCapability,
|
||||
TextDocumentSyncOptions, ImplementationProviderCapability, GenericCapability, TypeDefinitionProviderCapability
|
||||
};
|
||||
|
||||
pub fn server_capabilities() -> ServerCapabilities {
|
||||
|
@ -23,7 +23,7 @@ pub fn server_capabilities() -> ServerCapabilities {
|
|||
trigger_characters: Some(vec!["(".to_string(), ",".to_string(), ")".to_string()]),
|
||||
}),
|
||||
definition_provider: Some(true),
|
||||
type_definition_provider: None,
|
||||
type_definition_provider: Some(TypeDefinitionProviderCapability::Simple(true)),
|
||||
implementation_provider: Some(ImplementationProviderCapability::Simple(true)),
|
||||
references_provider: Some(true),
|
||||
document_highlight_provider: Some(true),
|
||||
|
|
|
@ -306,6 +306,7 @@ fn on_request(
|
|||
.on::<req::WorkspaceSymbol>(handlers::handle_workspace_symbol)?
|
||||
.on::<req::GotoDefinition>(handlers::handle_goto_definition)?
|
||||
.on::<req::GotoImplementation>(handlers::handle_goto_implementation)?
|
||||
.on::<req::GotoTypeDefinition>(handlers::handle_goto_type_definition)?
|
||||
.on::<req::ParentModule>(handlers::handle_parent_module)?
|
||||
.on::<req::Runnables>(handlers::handle_runnables)?
|
||||
.on::<req::DecorationsRequest>(handlers::handle_decorations)?
|
||||
|
|
|
@ -288,6 +288,26 @@ pub fn handle_goto_implementation(
|
|||
Ok(Some(req::GotoDefinitionResponse::Link(res)))
|
||||
}
|
||||
|
||||
pub fn handle_goto_type_definition(
|
||||
world: ServerWorld,
|
||||
params: req::TextDocumentPositionParams,
|
||||
) -> Result<Option<req::GotoTypeDefinitionResponse>> {
|
||||
let position = params.try_conv_with(&world)?;
|
||||
let line_index = world.analysis().file_line_index(position.file_id);
|
||||
let nav_info = match world.analysis().goto_type_definition(position)? {
|
||||
None => return Ok(None),
|
||||
Some(it) => it,
|
||||
};
|
||||
let nav_range = nav_info.range;
|
||||
let res = nav_info
|
||||
.info
|
||||
.into_iter()
|
||||
.map(|nav| RangeInfo::new(nav_range, nav))
|
||||
.map(|nav| to_location_link(&nav, &world, &line_index))
|
||||
.collect::<Result<Vec<_>>>()?;
|
||||
Ok(Some(req::GotoDefinitionResponse::Link(res)))
|
||||
}
|
||||
|
||||
pub fn handle_parent_module(
|
||||
world: ServerWorld,
|
||||
params: req::TextDocumentPositionParams,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue