Skip to content

Commit 8d51b02

Browse files
bors[bot]h-michael
andcommitted
Merge #414
414: textDocument/hover returns both type name and doc_text r=matklad a=h-michael implement #389 Co-authored-by: Hirokazu Hata <[email protected]>
2 parents 0f0969b + 341eb4a commit 8d51b02

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

crates/ra_lsp_server/src/main_loop/handlers.rs

+25-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use languageserver_types::{
99
Range, WorkspaceEdit, ParameterInformation, ParameterLabel, SignatureInformation, Hover,
1010
HoverContents, DocumentFormattingParams, DocumentHighlight,
1111
};
12-
use ra_analysis::{FileId, FoldKind, Query, RunnableKind, FileRange, FilePosition, Severity};
12+
use ra_analysis::{FileId, FoldKind, Query, RunnableKind, FileRange, FilePosition, Severity, NavigationTarget};
1313
use ra_syntax::{TextUnit, text_utils::intersect};
1414
use ra_text_edit::text_utils::contains_offset_nonstrict;
1515
use rustc_hash::FxHashMap;
@@ -517,11 +517,20 @@ pub fn handle_hover(
517517
Some(it) => it,
518518
};
519519
let mut result = Vec::new();
520+
let file_id = params.text_document.try_conv_with(&world)?;
521+
let file_range = FileRange {
522+
file_id,
523+
range: rr.reference_range,
524+
};
525+
if let Some(type_name) = get_type(&world, file_range) {
526+
result.push(type_name);
527+
}
520528
for nav in rr.resolves_to {
521-
if let Some(docs) = world.analysis().doc_text_for(nav)? {
529+
if let Some(docs) = get_doc_text(&world, nav) {
522530
result.push(docs);
523531
}
524532
}
533+
525534
let range = rr.reference_range.conv_with(&line_index);
526535
if result.len() > 0 {
527536
return Ok(Some(Hover {
@@ -753,3 +762,17 @@ fn to_diagnostic_severity(severity: Severity) -> DiagnosticSeverity {
753762
WeakWarning => DiagnosticSeverity::Hint,
754763
}
755764
}
765+
766+
fn get_type(world: &ServerWorld, file_range: FileRange) -> Option<String> {
767+
match world.analysis().type_of(file_range) {
768+
Ok(result) => result,
769+
_ => None,
770+
}
771+
}
772+
773+
fn get_doc_text(world: &ServerWorld, nav: NavigationTarget) -> Option<String> {
774+
match world.analysis().doc_text_for(nav) {
775+
Ok(result) => result,
776+
_ => None,
777+
}
778+
}

0 commit comments

Comments
 (0)