@@ -4,6 +4,7 @@ use either::Either;
4
4
use hir:: { original_range, AssocItem , FieldSource , HasSource , InFile , ModuleSource } ;
5
5
use ra_db:: { FileId , SourceDatabase } ;
6
6
use ra_ide_db:: { defs:: Definition , RootDatabase } ;
7
+ use ra_syntax:: ast:: AstToken ;
7
8
use ra_syntax:: {
8
9
ast:: { self , DocCommentsOwner , NameOwner } ,
9
10
match_ast, AstNode , SmolStr ,
@@ -135,8 +136,8 @@ impl NavigationTarget {
135
136
db : & RootDatabase ,
136
137
node : InFile < & dyn ast:: NameOwner > ,
137
138
) -> NavigationTarget {
138
- //FIXME: use `_` instead of empty string
139
- let name = node. value . name ( ) . map ( |it| it. text ( ) . clone ( ) ) . unwrap_or_default ( ) ;
139
+ let name =
140
+ node. value . name ( ) . map ( |it| it. text ( ) . clone ( ) ) . unwrap_or_else ( || SmolStr :: new ( "_" ) ) ;
140
141
let focus_range =
141
142
node. value . name ( ) . map ( |it| original_range ( db, node. with_value ( it. syntax ( ) ) ) . range ) ;
142
143
let frange = original_range ( db, node. map ( |it| it. syntax ( ) ) ) ;
@@ -150,6 +151,26 @@ impl NavigationTarget {
150
151
)
151
152
}
152
153
154
+ /// Allows `NavigationTarget` to be created from a `DocCommentsOwner` and a `NameOwner`
155
+ pub ( crate ) fn from_doc_commented (
156
+ db : & RootDatabase ,
157
+ named : InFile < & dyn ast:: NameOwner > ,
158
+ node : InFile < & dyn ast:: DocCommentsOwner > ,
159
+ ) -> NavigationTarget {
160
+ let name =
161
+ named. value . name ( ) . map ( |it| it. text ( ) . clone ( ) ) . unwrap_or_else ( || SmolStr :: new ( "_" ) ) ;
162
+ let focus_range = node. value . doc_comments ( ) . next ( ) . map ( |it| it. syntax ( ) . text_range ( ) ) ;
163
+ let frange = original_range ( db, node. map ( |it| it. syntax ( ) ) ) ;
164
+
165
+ NavigationTarget :: from_syntax (
166
+ frange. file_id ,
167
+ name,
168
+ focus_range,
169
+ frange. range ,
170
+ node. value . syntax ( ) . kind ( ) ,
171
+ )
172
+ }
173
+
153
174
fn from_syntax (
154
175
file_id : FileId ,
155
176
name : SmolStr ,
0 commit comments