@@ -64,13 +64,12 @@ pub(crate) fn rewrite_links(db: &RootDatabase, markdown: &str, definition: Defin
6464 // * path-based links: `../../module/struct.MyStruct.html`
6565 // * module-based links (AKA intra-doc links): `super::super::module::MyStruct`
6666 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 ( ) )
7172 }
72-
73- ( None , target. to_string ( ) , title. to_string ( ) )
7473 }
7574 } ) ;
7675 let mut out = String :: new ( ) ;
@@ -369,16 +368,21 @@ fn rewrite_intra_doc_link(
369368) -> Option < ( String , String ) > {
370369 let ( link, ns) = parse_intra_doc_link ( target) ;
371370
371+ let ( link, anchor) = match link. split_once ( '#' ) {
372+ Some ( ( new_link, anchor) ) => ( new_link, Some ( anchor) ) ,
373+ None => ( link, None ) ,
374+ } ;
375+
372376 let resolved = resolve_doc_path_for_def ( db, def, link, ns) ?;
373377 let mut url = get_doc_base_urls ( db, resolved, None , None ) . 0 ?;
374378
375- let ( _, file, frag ) = filename_and_frag_for_def ( db, resolved) ?;
379+ let ( _, file, _ ) = filename_and_frag_for_def ( db, resolved) ?;
376380 if let Some ( path) = mod_path_of_def ( db, resolved) {
377381 url = url. join ( & path) . ok ( ) ?;
378382 }
379383
380384 url = url. join ( & file) . ok ( ) ?;
381- url. set_fragment ( frag . as_deref ( ) ) ;
385+ url. set_fragment ( anchor ) ;
382386
383387 Some ( ( url. into ( ) , strip_prefixes_suffixes ( title) . to_string ( ) ) )
384388}
0 commit comments