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.rs | 20 |
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 { |