return ref ranges from gotodef

This commit is contained in:
Aleksey Kladov 2019-01-11 14:14:09 +03:00
parent f9ed8d4d23
commit 3aaf20bd6e
4 changed files with 24 additions and 10 deletions

View file

@ -6,7 +6,7 @@ use languageserver_types::{
};
use ra_ide_api::{
CompletionItem, CompletionItemKind, FileId, FilePosition, FileRange, FileSystemEdit,
InsertText, NavigationTarget, SourceChange, SourceFileEdit,
InsertText, NavigationTarget, SourceChange, SourceFileEdit, RangeInfo,
LineCol, LineIndex, translate_offset_with_edit
};
use ra_syntax::{SyntaxKind, TextRange, TextUnit};
@ -349,6 +349,15 @@ impl TryConvWith for &NavigationTarget {
}
}
impl TryConvWith for &RangeInfo<NavigationTarget> {
type Ctx = ServerWorld;
type Output = Location;
fn try_conv_with(self, world: &ServerWorld) -> Result<Location> {
let line_index = world.analysis().file_line_index(self.info.file_id());
to_location(self.info.file_id(), self.info.range(), &world, &line_index)
}
}
pub fn to_location(
file_id: FileId,
range: TextRange,

View file

@ -9,7 +9,7 @@ use languageserver_types::{
SignatureInformation, SymbolInformation, TextDocumentIdentifier, TextEdit, WorkspaceEdit,
};
use ra_ide_api::{
FileId, FilePosition, FileRange, FoldKind, Query, RunnableKind, Severity,
FileId, FilePosition, FileRange, FoldKind, Query, RunnableKind, Severity, SourceChange, RangeInfo,
};
use ra_syntax::{TextUnit, AstNode};
use rustc_hash::FxHashMap;
@ -208,12 +208,15 @@ pub fn handle_goto_definition(
params: req::TextDocumentPositionParams,
) -> Result<Option<req::GotoDefinitionResponse>> {
let position = params.try_conv_with(&world)?;
let navs = match world.analysis().goto_definition(position)? {
let nav_info = match world.analysis().goto_definition(position)? {
None => return Ok(None),
Some(it) => it,
};
let res = navs
let nav_range = nav_info.range;
let res = nav_info
.info
.into_iter()
.map(|nav| RangeInfo::new(nav_range, nav))
.map(|nav| nav.try_conv_with(&world))
.collect::<Result<Vec<_>>>()?;
Ok(Some(req::GotoDefinitionResponse::Array(res)))