@@ -64,13 +64,12 @@ pub(crate) fn rewrite_links(db: &RootDatabase, markdown: &str, definition: Defin
64
64
// * path-based links: `../../module/struct.MyStruct.html`
65
65
// * module-based links (AKA intra-doc links): `super::super::module::MyStruct`
66
66
if let Some ( ( target, title) ) = rewrite_intra_doc_link ( db, definition, target, title) {
67
- return ( None , target, title) ;
68
- }
69
- if let Some ( target) = rewrite_url_link ( db, definition, target) {
70
- return ( Some ( LinkType :: Inline ) , target, title. to_string ( ) ) ;
67
+ ( None , target, title)
68
+ } else if let Some ( target) = rewrite_url_link ( db, definition, target) {
69
+ ( Some ( LinkType :: Inline ) , target, title. to_string ( ) )
70
+ } else {
71
+ ( None , target. to_string ( ) , title. to_string ( ) )
71
72
}
72
-
73
- ( None , target. to_string ( ) , title. to_string ( ) )
74
73
}
75
74
} ) ;
76
75
let mut out = String :: new ( ) ;
@@ -369,16 +368,21 @@ fn rewrite_intra_doc_link(
369
368
) -> Option < ( String , String ) > {
370
369
let ( link, ns) = parse_intra_doc_link ( target) ;
371
370
371
+ let ( link, anchor) = match link. split_once ( '#' ) {
372
+ Some ( ( new_link, anchor) ) => ( new_link, Some ( anchor) ) ,
373
+ None => ( link, None ) ,
374
+ } ;
375
+
372
376
let resolved = resolve_doc_path_for_def ( db, def, link, ns) ?;
373
377
let mut url = get_doc_base_urls ( db, resolved, None , None ) . 0 ?;
374
378
375
- let ( _, file, frag ) = filename_and_frag_for_def ( db, resolved) ?;
379
+ let ( _, file, _ ) = filename_and_frag_for_def ( db, resolved) ?;
376
380
if let Some ( path) = mod_path_of_def ( db, resolved) {
377
381
url = url. join ( & path) . ok ( ) ?;
378
382
}
379
383
380
384
url = url. join ( & file) . ok ( ) ?;
381
- url. set_fragment ( frag . as_deref ( ) ) ;
385
+ url. set_fragment ( anchor ) ;
382
386
383
387
Some ( ( url. into ( ) , strip_prefixes_suffixes ( title) . to_string ( ) ) )
384
388
}
0 commit comments