@@ -10,7 +10,7 @@ use pulldown_cmark_to_cmark::{cmark_resume_with_options, Options as CMarkOptions
10
10
use stdx:: format_to;
11
11
use url:: Url ;
12
12
13
- use hir:: { db:: HirDatabase , Adt , AsAssocItem , AssocItem , AssocItemContainer , Crate , HasAttrs } ;
13
+ use hir:: { db:: HirDatabase , Adt , AsAssocItem , AssocItem , AssocItemContainer , HasAttrs } ;
14
14
use ide_db:: {
15
15
base_db:: { CrateOrigin , LangCrateOrigin , SourceDatabase } ,
16
16
defs:: { Definition , NameClass , NameRefClass } ,
@@ -293,8 +293,7 @@ fn broken_link_clone_cb<'a>(link: BrokenLink<'a>) -> Option<(CowStr<'a>, CowStr<
293
293
fn get_doc_link ( db : & RootDatabase , def : Definition ) -> Option < String > {
294
294
let ( target, file, frag) = filename_and_frag_for_def ( db, def) ?;
295
295
296
- let krate = target. krate ( db) ?;
297
- let mut url = get_doc_base_url ( db, krate) ?;
296
+ let mut url = get_doc_base_url ( db, target) ?;
298
297
299
298
if let Some ( path) = mod_path_of_def ( db, target) {
300
299
url = url. join ( & path) . ok ( ) ?;
@@ -315,8 +314,7 @@ fn rewrite_intra_doc_link(
315
314
let ( link, ns) = parse_intra_doc_link ( target) ;
316
315
317
316
let resolved = resolve_doc_path_for_def ( db, def, link, ns) ?;
318
- let krate = resolved. krate ( db) ?;
319
- let mut url = get_doc_base_url ( db, krate) ?;
317
+ let mut url = get_doc_base_url ( db, resolved) ?;
320
318
321
319
let ( _, file, frag) = filename_and_frag_for_def ( db, resolved) ?;
322
320
if let Some ( path) = mod_path_of_def ( db, resolved) {
@@ -335,8 +333,7 @@ fn rewrite_url_link(db: &RootDatabase, def: Definition, target: &str) -> Option<
335
333
return None ;
336
334
}
337
335
338
- let krate = def. krate ( db) ?;
339
- let mut url = get_doc_base_url ( db, krate) ?;
336
+ let mut url = get_doc_base_url ( db, def) ?;
340
337
let ( def, file, frag) = filename_and_frag_for_def ( db, def) ?;
341
338
342
339
if let Some ( path) = mod_path_of_def ( db, def) {
@@ -401,13 +398,20 @@ fn map_links<'e>(
401
398
} )
402
399
}
403
400
404
- /// Get the root URL for the documentation of a crate .
401
+ /// Get the root URL for the documentation of a definition .
405
402
///
406
403
/// ```ignore
407
404
/// https://doc.rust-lang.org/std/iter/trait.Iterator.html#tymethod.next
408
405
/// ^^^^^^^^^^^^^^^^^^^^^^^^^^
409
406
/// ```
410
- fn get_doc_base_url ( db : & RootDatabase , krate : Crate ) -> Option < Url > {
407
+ fn get_doc_base_url ( db : & RootDatabase , def : Definition ) -> Option < Url > {
408
+ // special case base url of `BuiltinType` to core
409
+ // https://github.com/rust-lang/rust-analyzer/issues/12250
410
+ if let Definition :: BuiltinType ( ..) = def {
411
+ return Url :: parse ( "https://doc.rust-lang.org/nightly/core/" ) . ok ( ) ;
412
+ } ;
413
+
414
+ let krate = def. krate ( db) ?;
411
415
let display_name = krate. display_name ( db) ?;
412
416
413
417
let base = match db. crate_graph ( ) [ krate. into ( ) ] . origin {
0 commit comments