mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 22:31:43 +00:00
Show documentation for hover requests
This commit is contained in:
parent
6df71da81f
commit
8ccd26adf3
6 changed files with 71 additions and 4 deletions
|
@ -16,7 +16,7 @@ pub fn server_capabilities() -> ServerCapabilities {
|
|||
save: None,
|
||||
},
|
||||
)),
|
||||
hover_provider: None,
|
||||
hover_provider: Some(true),
|
||||
completion_provider: Some(CompletionOptions {
|
||||
resolve_provider: None,
|
||||
trigger_characters: None,
|
||||
|
|
|
@ -4,9 +4,9 @@ use gen_lsp_server::ErrorCode;
|
|||
use languageserver_types::{
|
||||
CodeActionResponse, Command, CompletionItem, CompletionItemKind, Diagnostic,
|
||||
DiagnosticSeverity, DocumentSymbol, Documentation, FoldingRange, FoldingRangeKind,
|
||||
FoldingRangeParams, InsertTextFormat, Location, MarkupContent, MarkupKind, Position,
|
||||
FoldingRangeParams, InsertTextFormat, Location, MarkupContent, MarkupKind, MarkedString, Position,
|
||||
PrepareRenameResponse, RenameParams, SymbolInformation, TextDocumentIdentifier, TextEdit,
|
||||
WorkspaceEdit, ParameterInformation, SignatureInformation,
|
||||
WorkspaceEdit, ParameterInformation, SignatureInformation, Hover, HoverContents,
|
||||
};
|
||||
use ra_analysis::{FileId, FoldKind, Query, RunnableKind, FilePosition};
|
||||
use ra_syntax::text_utils::contains_offset_nonstrict;
|
||||
|
@ -478,6 +478,31 @@ pub fn handle_signature_help(
|
|||
}
|
||||
}
|
||||
|
||||
pub fn handle_hover(
|
||||
world: ServerWorld,
|
||||
params: req::TextDocumentPositionParams,
|
||||
) -> Result<Option<Hover>> {
|
||||
let position = params.try_conv_with(&world)?;
|
||||
let line_index = world.analysis().file_line_index(position.file_id);
|
||||
|
||||
for (file_id, symbol) in world.analysis().approximately_resolve_symbol(position)? {
|
||||
let range = symbol.node_range.conv_with(&line_index);
|
||||
let name = symbol.name.to_string();
|
||||
let comment = world.analysis.doc_comment_for(file_id, symbol)?;
|
||||
|
||||
if comment.is_some() {
|
||||
let contents = HoverContents::Scalar(MarkedString::String(comment.unwrap()));
|
||||
|
||||
return Ok(Some(Hover {
|
||||
contents,
|
||||
range: Some(range)
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
pub fn handle_prepare_rename(
|
||||
world: ServerWorld,
|
||||
params: req::TextDocumentPositionParams,
|
||||
|
|
|
@ -259,6 +259,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::HoverRequest>(handlers::handle_hover)?
|
||||
.on::<req::PrepareRenameRequest>(handlers::handle_prepare_rename)?
|
||||
.on::<req::Rename>(handlers::handle_rename)?
|
||||
.on::<req::References>(handlers::handle_references)?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue