@@ -773,30 +773,7 @@ fn is_derive_trait_collision<T>(ns: &PerNS<Result<(Res, T), ResolutionFailure<'_
773773
774774impl < ' a , ' tcx > DocVisitor for LinkCollector < ' a , ' tcx > {
775775 fn visit_item ( & mut self , item : & Item ) {
776- // We want to resolve in the lexical scope of the documentation.
777- // In the presence of re-exports, this is not the same as the module of the item.
778- // Rather than merging all documentation into one, resolve it one attribute at a time
779- // so we know which module it came from.
780- for ( item_id, doc) in prepare_to_doc_link_resolution ( & item. attrs . doc_strings ) {
781- if !may_have_doc_links ( & doc) {
782- continue ;
783- }
784- debug ! ( "combined_docs={}" , doc) ;
785- // NOTE: if there are links that start in one crate and end in another, this will not resolve them.
786- // This is a degenerate case and it's not supported by rustdoc.
787- let item_id = item_id. unwrap_or_else ( || item. item_id . expect_def_id ( ) ) ;
788- let module_id = match self . cx . tcx . def_kind ( item_id) {
789- DefKind :: Mod if item. inner_docs ( self . cx . tcx ) => item_id,
790- _ => find_nearest_parent_module ( self . cx . tcx , item_id) . unwrap ( ) ,
791- } ;
792- for md_link in preprocessed_markdown_links ( & doc) {
793- let link = self . resolve_link ( item, item_id, module_id, & doc, & md_link) ;
794- if let Some ( link) = link {
795- self . cx . cache . intra_doc_links . entry ( item. item_id ) . or_default ( ) . push ( link) ;
796- }
797- }
798- }
799-
776+ self . resolve_links ( item) ;
800777 self . visit_item_recur ( item)
801778 }
802779}
@@ -923,6 +900,32 @@ fn preprocessed_markdown_links(s: &str) -> Vec<PreprocessedMarkdownLink> {
923900}
924901
925902impl LinkCollector < ' _ , ' _ > {
903+ fn resolve_links ( & mut self , item : & Item ) {
904+ // We want to resolve in the lexical scope of the documentation.
905+ // In the presence of re-exports, this is not the same as the module of the item.
906+ // Rather than merging all documentation into one, resolve it one attribute at a time
907+ // so we know which module it came from.
908+ for ( item_id, doc) in prepare_to_doc_link_resolution ( & item. attrs . doc_strings ) {
909+ if !may_have_doc_links ( & doc) {
910+ continue ;
911+ }
912+ debug ! ( "combined_docs={}" , doc) ;
913+ // NOTE: if there are links that start in one crate and end in another, this will not resolve them.
914+ // This is a degenerate case and it's not supported by rustdoc.
915+ let item_id = item_id. unwrap_or_else ( || item. item_id . expect_def_id ( ) ) ;
916+ let module_id = match self . cx . tcx . def_kind ( item_id) {
917+ DefKind :: Mod if item. inner_docs ( self . cx . tcx ) => item_id,
918+ _ => find_nearest_parent_module ( self . cx . tcx , item_id) . unwrap ( ) ,
919+ } ;
920+ for md_link in preprocessed_markdown_links ( & doc) {
921+ let link = self . resolve_link ( item, item_id, module_id, & doc, & md_link) ;
922+ if let Some ( link) = link {
923+ self . cx . cache . intra_doc_links . entry ( item. item_id ) . or_default ( ) . push ( link) ;
924+ }
925+ }
926+ }
927+ }
928+
926929 /// This is the entry point for resolving an intra-doc link.
927930 ///
928931 /// FIXME(jynelson): this is way too many arguments
0 commit comments