@@ -22,61 +22,6 @@ use crate::json::JsonRenderer;
22
22
use crate :: passes:: collect_intra_doc_links:: UrlFragment ;
23
23
24
24
impl 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
-
80
25
fn ids ( & self , items : & [ clean:: Item ] ) -> Vec < Id > {
81
26
items
82
27
. iter ( )
@@ -146,6 +91,63 @@ where
146
91
}
147
92
}
148
93
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
+
149
151
impl FromClean < clean:: Span > for Option < Span > {
150
152
fn from_clean ( span : & clean:: Span , renderer : & JsonRenderer < ' _ > ) -> Self {
151
153
match span. filename ( renderer. sess ( ) ) {
@@ -320,7 +322,7 @@ impl FromClean<clean::Item> for ItemEnum {
320
322
bounds : b. into_json ( renderer) ,
321
323
type_ : Some ( t. item_type . as_ref ( ) . unwrap_or ( & t. type_ ) . into_json ( renderer) ) ,
322
324
} ,
323
- // `convert_item ` early returns `None` for stripped items and keywords.
325
+ // `Option<Item>::into_json ` early returns `None` for stripped items and keywords.
324
326
KeywordItem => unreachable ! ( ) ,
325
327
StrippedItem ( inner) => {
326
328
match inner. as_ref ( ) {
@@ -329,7 +331,8 @@ impl FromClean<clean::Item> for ItemEnum {
329
331
items : renderer. ids ( & m. items ) ,
330
332
is_stripped : true ,
331
333
} ) ,
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
333
336
_ => unreachable ! ( ) ,
334
337
}
335
338
}
0 commit comments