aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/display/navigation_target.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/display/navigation_target.rs')
-rw-r--r--crates/ra_ide/src/display/navigation_target.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/crates/ra_ide/src/display/navigation_target.rs b/crates/ra_ide/src/display/navigation_target.rs
index 914a8b471..5da28edd2 100644
--- a/crates/ra_ide/src/display/navigation_target.rs
+++ b/crates/ra_ide/src/display/navigation_target.rs
@@ -11,7 +11,7 @@ use ra_syntax::{
11 TextRange, 11 TextRange,
12}; 12};
13 13
14use crate::FileSymbol; 14use crate::{FileRange, FileSymbol};
15 15
16use super::short_label::ShortLabel; 16use super::short_label::ShortLabel;
17 17
@@ -22,10 +22,11 @@ use super::short_label::ShortLabel;
22/// code, like a function or a struct, but this is not strictly required. 22/// code, like a function or a struct, but this is not strictly required.
23#[derive(Debug, Clone, PartialEq, Eq, Hash)] 23#[derive(Debug, Clone, PartialEq, Eq, Hash)]
24pub struct NavigationTarget { 24pub struct NavigationTarget {
25 // FIXME: use FileRange?
25 file_id: FileId, 26 file_id: FileId,
27 full_range: TextRange,
26 name: SmolStr, 28 name: SmolStr,
27 kind: SyntaxKind, 29 kind: SyntaxKind,
28 full_range: TextRange,
29 focus_range: Option<TextRange>, 30 focus_range: Option<TextRange>,
30 container_name: Option<SmolStr>, 31 container_name: Option<SmolStr>,
31 description: Option<String>, 32 description: Option<String>,
@@ -63,6 +64,10 @@ impl NavigationTarget {
63 self.file_id 64 self.file_id
64 } 65 }
65 66
67 pub fn file_range(&self) -> FileRange {
68 FileRange { file_id: self.file_id, range: self.full_range }
69 }
70
66 pub fn full_range(&self) -> TextRange { 71 pub fn full_range(&self) -> TextRange {
67 self.full_range 72 self.full_range
68 } 73 }
@@ -376,16 +381,20 @@ impl ToNav for hir::Local {
376impl ToNav for hir::TypeParam { 381impl ToNav for hir::TypeParam {
377 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { 382 fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
378 let src = self.source(db); 383 let src = self.source(db);
379 let range = match src.value { 384 let full_range = match &src.value {
380 Either::Left(it) => it.syntax().text_range(), 385 Either::Left(it) => it.syntax().text_range(),
381 Either::Right(it) => it.syntax().text_range(), 386 Either::Right(it) => it.syntax().text_range(),
382 }; 387 };
388 let focus_range = match &src.value {
389 Either::Left(_) => None,
390 Either::Right(it) => it.name().map(|it| it.syntax().text_range()),
391 };
383 NavigationTarget { 392 NavigationTarget {
384 file_id: src.file_id.original_file(db), 393 file_id: src.file_id.original_file(db),
385 name: self.name(db).to_string().into(), 394 name: self.name(db).to_string().into(),
386 kind: TYPE_PARAM, 395 kind: TYPE_PARAM,
387 full_range: range, 396 full_range,
388 focus_range: None, 397 focus_range,
389 container_name: None, 398 container_name: None,
390 description: None, 399 description: None,
391 docs: None, 400 docs: None,