aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide_api/src/goto_definition.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide_api/src/goto_definition.rs')
-rw-r--r--crates/ra_ide_api/src/goto_definition.rs49
1 files changed, 36 insertions, 13 deletions
diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs
index e72b7a6e7..325a5a4f3 100644
--- a/crates/ra_ide_api/src/goto_definition.rs
+++ b/crates/ra_ide_api/src/goto_definition.rs
@@ -1,6 +1,6 @@
1use ra_db::{FileId, SourceDatabase}; 1use ra_db::{FileId, SourceDatabase};
2use ra_syntax::{ 2use ra_syntax::{
3 AstNode, ast, 3 AstNode, ast::{self, DocCommentsOwner},
4 algo::{ 4 algo::{
5 find_node_at_offset, 5 find_node_at_offset,
6 visit::{visitor, Visitor}, 6 visit::{visitor, Visitor},
@@ -13,6 +13,7 @@ use crate::{
13 db::RootDatabase, 13 db::RootDatabase,
14 RangeInfo, 14 RangeInfo,
15 name_ref_kind::{NameRefKind::*, classify_name_ref}, 15 name_ref_kind::{NameRefKind::*, classify_name_ref},
16 display::ShortLabel,
16}; 17};
17 18
18pub(crate) fn goto_definition( 19pub(crate) fn goto_definition(
@@ -82,7 +83,7 @@ pub(crate) fn reference_definition(
82 // Fallback index based approach: 83 // Fallback index based approach:
83 let navs = crate::symbol_index::index_resolve(db, name_ref) 84 let navs = crate::symbol_index::index_resolve(db, name_ref)
84 .into_iter() 85 .into_iter()
85 .map(NavigationTarget::from_symbol) 86 .map(|s| NavigationTarget::from_symbol(db, s))
86 .collect(); 87 .collect();
87 Approximate(navs) 88 Approximate(navs)
88} 89}
@@ -114,17 +115,39 @@ pub(crate) fn name_definition(
114 115
115fn named_target(file_id: FileId, node: &SyntaxNode) -> Option<NavigationTarget> { 116fn named_target(file_id: FileId, node: &SyntaxNode) -> Option<NavigationTarget> {
116 visitor() 117 visitor()
117 .visit(|node: &ast::StructDef| NavigationTarget::from_named(file_id, node)) 118 .visit(|node: &ast::StructDef| {
118 .visit(|node: &ast::EnumDef| NavigationTarget::from_named(file_id, node)) 119 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
119 .visit(|node: &ast::EnumVariant| NavigationTarget::from_named(file_id, node)) 120 })
120 .visit(|node: &ast::FnDef| NavigationTarget::from_named(file_id, node)) 121 .visit(|node: &ast::EnumDef| {
121 .visit(|node: &ast::TypeAliasDef| NavigationTarget::from_named(file_id, node)) 122 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
122 .visit(|node: &ast::ConstDef| NavigationTarget::from_named(file_id, node)) 123 })
123 .visit(|node: &ast::StaticDef| NavigationTarget::from_named(file_id, node)) 124 .visit(|node: &ast::EnumVariant| {
124 .visit(|node: &ast::TraitDef| NavigationTarget::from_named(file_id, node)) 125 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
125 .visit(|node: &ast::NamedFieldDef| NavigationTarget::from_named(file_id, node)) 126 })
126 .visit(|node: &ast::Module| NavigationTarget::from_named(file_id, node)) 127 .visit(|node: &ast::FnDef| {
127 .visit(|node: &ast::MacroCall| NavigationTarget::from_named(file_id, node)) 128 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
129 })
130 .visit(|node: &ast::TypeAliasDef| {
131 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
132 })
133 .visit(|node: &ast::ConstDef| {
134 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
135 })
136 .visit(|node: &ast::StaticDef| {
137 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
138 })
139 .visit(|node: &ast::TraitDef| {
140 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
141 })
142 .visit(|node: &ast::NamedFieldDef| {
143 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
144 })
145 .visit(|node: &ast::Module| {
146 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), node.short_label())
147 })
148 .visit(|node: &ast::MacroCall| {
149 NavigationTarget::from_named(file_id, node, node.doc_comment_text(), None)
150 })
128 .accept(node) 151 .accept(node)
129} 152}
130 153