@@ -62,12 +62,15 @@ pub(crate) use self::types::*;
6262pub ( crate ) use self :: utils:: { krate, register_res, synthesize_auto_trait_and_blanket_impls} ;
6363use crate :: core:: DocContext ;
6464use crate :: formats:: item_type:: ItemType ;
65- use crate :: visit_ast:: Module as DocModule ;
65+ use crate :: visit_ast;
6666
67- pub ( crate ) fn clean_doc_module < ' tcx > ( doc : & DocModule < ' tcx > , cx : & mut DocContext < ' tcx > ) -> Item {
67+ pub ( crate ) fn clean_doc_module < ' tcx > (
68+ doc : & visit_ast:: Module < ' tcx > ,
69+ cx : & mut DocContext < ' tcx > ,
70+ ) -> Item {
6871 let mut items: Vec < Item > = vec ! [ ] ;
6972 let mut inserted = FxHashSet :: default ( ) ;
70- items. extend ( doc. foreigns . iter ( ) . map ( |( item, renamed, import_id) | {
73+ items. extend ( doc. foreigns . iter ( ) . map ( |visit_ast :: Foreign { item, renamed, import_id } | {
7174 let item = clean_maybe_renamed_foreign_item ( cx, item, * renamed, * import_id) ;
7275 if let Some ( name) = item. name
7376 && ( cx. document_hidden ( ) || !item. is_doc_hidden ( ) )
@@ -95,52 +98,56 @@ pub(crate) fn clean_doc_module<'tcx>(doc: &DocModule<'tcx>, cx: &mut DocContext<
9598 // This covers the case where somebody does an import which should pull in an item,
9699 // but there's already an item with the same namespace and same name. Rust gives
97100 // priority to the not-imported one, so we should, too.
98- items. extend ( doc. items . values ( ) . flat_map ( |entry| {
99- // First, lower everything other than glob imports.
100- let item = entry. item ;
101- if matches ! ( item. kind, hir:: ItemKind :: Use ( _, hir:: UseKind :: Glob ) ) {
102- return Vec :: new ( ) ;
103- }
104- let v = clean_maybe_renamed_item ( cx, item, entry. renamed , & entry. import_ids ) ;
105- for item in & v {
106- if let Some ( name) = item. name
107- && ( cx. document_hidden ( ) || !item. is_doc_hidden ( ) )
108- {
109- inserted. insert ( ( item. type_ ( ) , name) ) ;
101+ items. extend ( doc. items . values ( ) . flat_map (
102+ |visit_ast:: ItemEntry { item, renamed, import_ids } | {
103+ // First, lower everything other than glob imports.
104+ if matches ! ( item. kind, hir:: ItemKind :: Use ( _, hir:: UseKind :: Glob ) ) {
105+ return Vec :: new ( ) ;
110106 }
111- }
112- v
113- } ) ) ;
114- items. extend ( doc. inlined_foreigns . iter ( ) . flat_map ( |( ( _, renamed) , ( res, local_import_id) ) | {
115- let Some ( def_id) = res. opt_def_id ( ) else { return Vec :: new ( ) } ;
116- let name = renamed. unwrap_or_else ( || cx. tcx . item_name ( def_id) ) ;
117- let import = cx. tcx . hir_expect_item ( * local_import_id) ;
118- match import. kind {
119- hir:: ItemKind :: Use ( path, kind) => {
120- let hir:: UsePath { segments, span, .. } = * path;
121- let path = hir:: Path { segments, res : * res, span } ;
122- clean_use_statement_inner (
123- import,
124- Some ( name) ,
125- & path,
126- kind,
127- cx,
128- & mut Default :: default ( ) ,
129- )
107+ let v = clean_maybe_renamed_item ( cx, item, * renamed, import_ids) ;
108+ for item in & v {
109+ if let Some ( name) = item. name
110+ && ( cx. document_hidden ( ) || !item. is_doc_hidden ( ) )
111+ {
112+ inserted. insert ( ( item. type_ ( ) , name) ) ;
113+ }
130114 }
131- _ => unreachable ! ( ) ,
132- }
133- } ) ) ;
134- items. extend ( doc. items . values ( ) . flat_map ( |entry| {
135- // Now we actually lower the imports, skipping everything else.
136- let item = entry. item ;
137- if let hir:: ItemKind :: Use ( path, hir:: UseKind :: Glob ) = item. kind {
138- clean_use_statement ( item, entry. renamed , path, hir:: UseKind :: Glob , cx, & mut inserted)
139- } else {
140- // skip everything else
141- Vec :: new ( )
142- }
143- } ) ) ;
115+ v
116+ } ,
117+ ) ) ;
118+ items. extend ( doc. inlined_foreigns . iter ( ) . flat_map (
119+ |( ( _, renamed) , visit_ast:: InlinedForeign { res, import_id } ) | {
120+ let Some ( def_id) = res. opt_def_id ( ) else { return Vec :: new ( ) } ;
121+ let name = renamed. unwrap_or_else ( || cx. tcx . item_name ( def_id) ) ;
122+ let import = cx. tcx . hir_expect_item ( * import_id) ;
123+ match import. kind {
124+ hir:: ItemKind :: Use ( path, kind) => {
125+ let hir:: UsePath { segments, span, .. } = * path;
126+ let path = hir:: Path { segments, res : * res, span } ;
127+ clean_use_statement_inner (
128+ import,
129+ Some ( name) ,
130+ & path,
131+ kind,
132+ cx,
133+ & mut Default :: default ( ) ,
134+ )
135+ }
136+ _ => unreachable ! ( ) ,
137+ }
138+ } ,
139+ ) ) ;
140+ items. extend ( doc. items . values ( ) . flat_map (
141+ |visit_ast:: ItemEntry { item, renamed, import_ids : _ } | {
142+ // Now we actually lower the imports, skipping everything else.
143+ if let hir:: ItemKind :: Use ( path, hir:: UseKind :: Glob ) = item. kind {
144+ clean_use_statement ( item, * renamed, path, hir:: UseKind :: Glob , cx, & mut inserted)
145+ } else {
146+ // skip everything else
147+ Vec :: new ( )
148+ }
149+ } ,
150+ ) ) ;
144151
145152 // determine if we should display the inner contents or
146153 // the outer `mod` item for the source code.
0 commit comments