@@ -98,6 +98,29 @@ pub(crate) fn remove_links(markdown: &str) -> String {
98
98
out
99
99
}
100
100
101
+ /// Retrieve a link to documentation for the given symbol.
102
+ pub ( crate ) fn external_docs (
103
+ db : & RootDatabase ,
104
+ position : & FilePosition ,
105
+ ) -> Option < DocumentationLink > {
106
+ let sema = Semantics :: new ( db) ;
107
+ let file = sema. parse ( position. file_id ) . syntax ( ) . clone ( ) ;
108
+ let token = pick_best ( file. token_at_offset ( position. offset ) ) ?;
109
+ let token = sema. descend_into_macros ( token) ;
110
+
111
+ let node = token. parent ( ) ?;
112
+ let definition = match_ast ! {
113
+ match node {
114
+ ast:: NameRef ( name_ref) => NameRefClass :: classify( & sema, & name_ref) . map( |d| d. referenced( sema. db) ) ,
115
+ ast:: Name ( name) => NameClass :: classify( & sema, & name) . map( |d| d. referenced_or_defined( sema. db) ) ,
116
+ _ => None ,
117
+ }
118
+ } ;
119
+
120
+ get_doc_link ( db, definition?)
121
+ }
122
+
123
+ /// Extracts all links from a given markdown text.
101
124
pub ( crate ) fn extract_definitions_from_markdown (
102
125
markdown : & str ,
103
126
) -> Vec < ( Range < usize > , String , Option < hir:: Namespace > ) > {
@@ -178,15 +201,15 @@ pub(crate) fn resolve_doc_path_for_def(
178
201
) -> Option < hir:: ModuleDef > {
179
202
match def {
180
203
Definition :: ModuleDef ( def) => match def {
181
- ModuleDef :: Module ( it) => it. resolve_doc_path ( db, & link, ns) ,
182
- ModuleDef :: Function ( it) => it. resolve_doc_path ( db, & link, ns) ,
183
- ModuleDef :: Adt ( it) => it. resolve_doc_path ( db, & link, ns) ,
184
- ModuleDef :: Variant ( it) => it. resolve_doc_path ( db, & link, ns) ,
185
- ModuleDef :: Const ( it) => it. resolve_doc_path ( db, & link, ns) ,
186
- ModuleDef :: Static ( it) => it. resolve_doc_path ( db, & link, ns) ,
187
- ModuleDef :: Trait ( it) => it. resolve_doc_path ( db, & link, ns) ,
188
- ModuleDef :: TypeAlias ( it) => it. resolve_doc_path ( db, & link, ns) ,
189
- ModuleDef :: BuiltinType ( _) => None ,
204
+ hir :: ModuleDef :: Module ( it) => it. resolve_doc_path ( db, & link, ns) ,
205
+ hir :: ModuleDef :: Function ( it) => it. resolve_doc_path ( db, & link, ns) ,
206
+ hir :: ModuleDef :: Adt ( it) => it. resolve_doc_path ( db, & link, ns) ,
207
+ hir :: ModuleDef :: Variant ( it) => it. resolve_doc_path ( db, & link, ns) ,
208
+ hir :: ModuleDef :: Const ( it) => it. resolve_doc_path ( db, & link, ns) ,
209
+ hir :: ModuleDef :: Static ( it) => it. resolve_doc_path ( db, & link, ns) ,
210
+ hir :: ModuleDef :: Trait ( it) => it. resolve_doc_path ( db, & link, ns) ,
211
+ hir :: ModuleDef :: TypeAlias ( it) => it. resolve_doc_path ( db, & link, ns) ,
212
+ hir :: ModuleDef :: BuiltinType ( _) => None ,
190
213
} ,
191
214
Definition :: Macro ( it) => it. resolve_doc_path ( db, & link, ns) ,
192
215
Definition :: Field ( it) => it. resolve_doc_path ( db, & link, ns) ,
@@ -328,28 +351,6 @@ fn rewrite_url_link(db: &RootDatabase, def: ModuleDef, target: &str) -> Option<S
328
351
. map ( |url| url. into_string ( ) )
329
352
}
330
353
331
- /// Retrieve a link to documentation for the given symbol.
332
- pub ( crate ) fn external_docs (
333
- db : & RootDatabase ,
334
- position : & FilePosition ,
335
- ) -> Option < DocumentationLink > {
336
- let sema = Semantics :: new ( db) ;
337
- let file = sema. parse ( position. file_id ) . syntax ( ) . clone ( ) ;
338
- let token = pick_best ( file. token_at_offset ( position. offset ) ) ?;
339
- let token = sema. descend_into_macros ( token) ;
340
-
341
- let node = token. parent ( ) ?;
342
- let definition = match_ast ! {
343
- match node {
344
- ast:: NameRef ( name_ref) => NameRefClass :: classify( & sema, & name_ref) . map( |d| d. referenced( sema. db) ) ,
345
- ast:: Name ( name) => NameClass :: classify( & sema, & name) . map( |d| d. referenced_or_defined( sema. db) ) ,
346
- _ => None ,
347
- }
348
- } ;
349
-
350
- get_doc_link ( db, definition?)
351
- }
352
-
353
354
/// Rewrites a markdown document, applying 'callback' to each link.
354
355
fn map_links < ' e > (
355
356
events : impl Iterator < Item = Event < ' e > > ,
0 commit comments