@@ -22,61 +22,6 @@ use crate::json::JsonRenderer;
2222use crate :: passes:: collect_intra_doc_links:: UrlFragment ;
2323
2424impl JsonRenderer < ' _ > {
25- pub ( super ) fn convert_item ( & self , item : & clean:: Item ) -> Option < Item > {
26- let deprecation = item. deprecation ( self . tcx ) ;
27- let links = self
28- . cache
29- . intra_doc_links
30- . get ( & item. item_id )
31- . into_iter ( )
32- . flatten ( )
33- . map ( |clean:: ItemLink { link, page_id, fragment, .. } | {
34- let id = match fragment {
35- Some ( UrlFragment :: Item ( frag_id) ) => * frag_id,
36- // FIXME: Pass the `UserWritten` segment to JSON consumer.
37- Some ( UrlFragment :: UserWritten ( _) ) | None => * page_id,
38- } ;
39-
40- ( String :: from ( & * * link) , self . id_from_item_default ( id. into ( ) ) )
41- } )
42- . collect ( ) ;
43- let docs = item. opt_doc_value ( ) ;
44- let attrs = item. attributes_and_repr ( self . tcx , self . cache ( ) , true ) ;
45- let span = item. span ( self . tcx ) ;
46- let visibility = item. visibility ( self . tcx ) ;
47- let clean:: ItemInner { name, item_id, .. } = * item. inner ;
48- let id = self . id_from_item ( & item) ;
49- let inner = match item. kind {
50- clean:: KeywordItem => return None ,
51- clean:: StrippedItem ( ref inner) => {
52- match & * * inner {
53- // We document stripped modules as with `Module::is_stripped` set to
54- // `true`, to prevent contained items from being orphaned for downstream users,
55- // as JSON does no inlining.
56- clean:: ModuleItem ( _)
57- if self . imported_items . contains ( & item_id. expect_def_id ( ) ) =>
58- {
59- item. into_json ( self )
60- }
61- _ => return None ,
62- }
63- }
64- _ => item. into_json ( self ) ,
65- } ;
66- Some ( Item {
67- id,
68- crate_id : item_id. krate ( ) . as_u32 ( ) ,
69- name : name. map ( |sym| sym. to_string ( ) ) ,
70- span : span. and_then ( |span| span. into_json ( self ) ) ,
71- visibility : visibility. into_json ( self ) ,
72- docs,
73- attrs,
74- deprecation : deprecation. into_json ( self ) ,
75- inner,
76- links,
77- } )
78- }
79-
8025 fn ids ( & self , items : & [ clean:: Item ] ) -> Vec < Id > {
8126 items
8227 . iter ( )
@@ -146,6 +91,63 @@ where
14691 }
14792}
14893
94+ impl FromClean < clean:: Item > for Option < Item > {
95+ fn from_clean ( item : & clean:: Item , renderer : & JsonRenderer < ' _ > ) -> Self {
96+ let deprecation = item. deprecation ( renderer. tcx ) ;
97+ let links = renderer
98+ . cache
99+ . intra_doc_links
100+ . get ( & item. item_id )
101+ . into_iter ( )
102+ . flatten ( )
103+ . map ( |clean:: ItemLink { link, page_id, fragment, .. } | {
104+ let id = match fragment {
105+ Some ( UrlFragment :: Item ( frag_id) ) => * frag_id,
106+ // FIXME: Pass the `UserWritten` segment to JSON consumer.
107+ Some ( UrlFragment :: UserWritten ( _) ) | None => * page_id,
108+ } ;
109+
110+ ( String :: from ( & * * link) , renderer. id_from_item_default ( id. into ( ) ) )
111+ } )
112+ . collect ( ) ;
113+ let docs = item. opt_doc_value ( ) ;
114+ let attrs = item. attributes_and_repr ( renderer. tcx , renderer. cache ( ) , true ) ;
115+ let span = item. span ( renderer. tcx ) ;
116+ let visibility = item. visibility ( renderer. tcx ) ;
117+ let clean:: ItemInner { name, item_id, .. } = * item. inner ;
118+ let id = renderer. id_from_item ( & item) ;
119+ let inner = match item. kind {
120+ clean:: KeywordItem => return None ,
121+ clean:: StrippedItem ( ref inner) => {
122+ match & * * inner {
123+ // We document stripped modules as with `Module::is_stripped` set to
124+ // `true`, to prevent contained items from being orphaned for downstream users,
125+ // as JSON does no inlining.
126+ clean:: ModuleItem ( _)
127+ if renderer. imported_items . contains ( & item_id. expect_def_id ( ) ) =>
128+ {
129+ item. into_json ( renderer)
130+ }
131+ _ => return None ,
132+ }
133+ }
134+ _ => item. into_json ( renderer) ,
135+ } ;
136+ Some ( Item {
137+ id,
138+ crate_id : item_id. krate ( ) . as_u32 ( ) ,
139+ name : name. map ( |sym| sym. to_string ( ) ) ,
140+ span : span. and_then ( |span| span. into_json ( renderer) ) ,
141+ visibility : visibility. into_json ( renderer) ,
142+ docs,
143+ attrs,
144+ deprecation : deprecation. into_json ( renderer) ,
145+ inner,
146+ links,
147+ } )
148+ }
149+ }
150+
149151impl FromClean < clean:: Span > for Option < Span > {
150152 fn from_clean ( span : & clean:: Span , renderer : & JsonRenderer < ' _ > ) -> Self {
151153 match span. filename ( renderer. sess ( ) ) {
@@ -320,7 +322,7 @@ impl FromClean<clean::Item> for ItemEnum {
320322 bounds : b. into_json ( renderer) ,
321323 type_ : Some ( t. item_type . as_ref ( ) . unwrap_or ( & t. type_ ) . into_json ( renderer) ) ,
322324 } ,
323- // `convert_item ` early returns `None` for stripped items and keywords.
325+ // `Option<Item>::into_json ` early returns `None` for stripped items and keywords.
324326 KeywordItem => unreachable ! ( ) ,
325327 StrippedItem ( inner) => {
326328 match inner. as_ref ( ) {
@@ -329,7 +331,8 @@ impl FromClean<clean::Item> for ItemEnum {
329331 items : renderer. ids ( & m. items ) ,
330332 is_stripped : true ,
331333 } ) ,
332- // `convert_item` early returns `None` for stripped items we're not including
334+ // `Option<Item>::into_json` early returns `None` for stripped items we're not
335+ // including
333336 _ => unreachable ! ( ) ,
334337 }
335338 }
0 commit comments