Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/navigation_target.rs')
-rw-r--r--crates/ide/src/navigation_target.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/crates/ide/src/navigation_target.rs b/crates/ide/src/navigation_target.rs
index 3121cdd4a2..7deb6cae38 100644
--- a/crates/ide/src/navigation_target.rs
+++ b/crates/ide/src/navigation_target.rs
@@ -167,10 +167,13 @@ impl NavigationTarget {
}
}
-impl ToNav for FileSymbol {
- fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
- NavigationTarget {
- file_id: self.file_id,
+impl TryToNav for FileSymbol {
+ fn try_to_nav(&self, db: &RootDatabase) -> Option<NavigationTarget> {
+ let full_range = self.loc.original_range(db)?;
+ let name_range = self.loc.original_name_range(db)?;
+
+ Some(NavigationTarget {
+ file_id: full_range.file_id,
name: self.name.clone(),
kind: Some(match self.kind {
FileSymbolKind::Function => SymbolKind::Function,
@@ -184,12 +187,12 @@ impl ToNav for FileSymbol {
FileSymbolKind::Macro => SymbolKind::Macro,
FileSymbolKind::Union => SymbolKind::Union,
}),
- full_range: self.range,
- focus_range: self.name_range,
+ full_range: full_range.range,
+ focus_range: Some(name_range.range),
container_name: self.container_name.clone(),
description: description_from_symbol(db, self),
docs: None,
- }
+ })
}
}
@@ -517,8 +520,7 @@ impl TryToNav for hir::ConstParam {
/// e.g. `struct Name`, `enum Name`, `fn Name`
pub(crate) fn description_from_symbol(db: &RootDatabase, symbol: &FileSymbol) -> Option<String> {
let sema = Semantics::new(db);
- let parse = sema.parse(symbol.file_id);
- let node = symbol.ptr.to_node(parse.syntax());
+ let node = symbol.loc.syntax(&sema)?;
match_ast! {
match node {