@@ -6,12 +6,14 @@ use std::convert::From;
6
6
7
7
use rustc_ast:: ast;
8
8
use rustc_hir:: def:: CtorKind ;
9
+ use rustc_middle:: ty:: TyCtxt ;
9
10
use rustc_span:: def_id:: { DefId , CRATE_DEF_INDEX } ;
10
11
use rustc_span:: Pos ;
11
12
12
13
use rustdoc_json_types:: * ;
13
14
14
15
use crate :: clean;
16
+ use crate :: clean:: utils:: print_const_expr;
15
17
use crate :: formats:: item_type:: ItemType ;
16
18
use crate :: json:: JsonRenderer ;
17
19
@@ -43,7 +45,7 @@ impl JsonRenderer<'_> {
43
45
. collect ( ) ,
44
46
deprecation : deprecation. map ( from_deprecation) ,
45
47
kind : item_type. into ( ) ,
46
- inner : kind. into ( ) ,
48
+ inner : from_clean_item_kind ( kind, self . tcx ) ,
47
49
} ) ,
48
50
}
49
51
}
@@ -144,44 +146,42 @@ crate fn from_def_id(did: DefId) -> Id {
144
146
Id ( format ! ( "{}:{}" , did. krate. as_u32( ) , u32 :: from( did. index) ) )
145
147
}
146
148
147
- impl From < clean:: ItemKind > for ItemEnum {
148
- fn from ( item : clean:: ItemKind ) -> Self {
149
- use clean:: ItemKind :: * ;
150
- match item {
151
- ModuleItem ( m) => ItemEnum :: ModuleItem ( m. into ( ) ) ,
152
- ExternCrateItem ( c, a) => {
153
- ItemEnum :: ExternCrateItem { name : c. to_string ( ) , rename : a. map ( |x| x. to_string ( ) ) }
154
- }
155
- ImportItem ( i) => ItemEnum :: ImportItem ( i. into ( ) ) ,
156
- StructItem ( s) => ItemEnum :: StructItem ( s. into ( ) ) ,
157
- UnionItem ( u) => ItemEnum :: UnionItem ( u. into ( ) ) ,
158
- StructFieldItem ( f) => ItemEnum :: StructFieldItem ( f. into ( ) ) ,
159
- EnumItem ( e) => ItemEnum :: EnumItem ( e. into ( ) ) ,
160
- VariantItem ( v) => ItemEnum :: VariantItem ( v. into ( ) ) ,
161
- FunctionItem ( f) => ItemEnum :: FunctionItem ( f. into ( ) ) ,
162
- ForeignFunctionItem ( f) => ItemEnum :: FunctionItem ( f. into ( ) ) ,
163
- TraitItem ( t) => ItemEnum :: TraitItem ( t. into ( ) ) ,
164
- TraitAliasItem ( t) => ItemEnum :: TraitAliasItem ( t. into ( ) ) ,
165
- MethodItem ( m, _) => ItemEnum :: MethodItem ( from_function_method ( m, true ) ) ,
166
- TyMethodItem ( m) => ItemEnum :: MethodItem ( from_function_method ( m, false ) ) ,
167
- ImplItem ( i) => ItemEnum :: ImplItem ( i. into ( ) ) ,
168
- StaticItem ( s) => ItemEnum :: StaticItem ( s. into ( ) ) ,
169
- ForeignStaticItem ( s) => ItemEnum :: StaticItem ( s. into ( ) ) ,
170
- ForeignTypeItem => ItemEnum :: ForeignTypeItem ,
171
- TypedefItem ( t, _) => ItemEnum :: TypedefItem ( t. into ( ) ) ,
172
- OpaqueTyItem ( t) => ItemEnum :: OpaqueTyItem ( t. into ( ) ) ,
173
- ConstantItem ( c) => ItemEnum :: ConstantItem ( c. into ( ) ) ,
174
- MacroItem ( m) => ItemEnum :: MacroItem ( m. source ) ,
175
- ProcMacroItem ( m) => ItemEnum :: ProcMacroItem ( m. into ( ) ) ,
176
- AssocConstItem ( t, s) => ItemEnum :: AssocConstItem { type_ : t. into ( ) , default : s } ,
177
- AssocTypeItem ( g, t) => ItemEnum :: AssocTypeItem {
178
- bounds : g. into_iter ( ) . map ( Into :: into) . collect ( ) ,
179
- default : t. map ( Into :: into) ,
180
- } ,
181
- StrippedItem ( inner) => ( * inner) . into ( ) ,
182
- PrimitiveItem ( _) | KeywordItem ( _) => {
183
- panic ! ( "{:?} is not supported for JSON output" , item)
184
- }
149
+ fn from_clean_item_kind ( item : clean:: ItemKind , tcx : TyCtxt < ' _ > ) -> ItemEnum {
150
+ use clean:: ItemKind :: * ;
151
+ match item {
152
+ ModuleItem ( m) => ItemEnum :: ModuleItem ( m. into ( ) ) ,
153
+ ExternCrateItem ( c, a) => {
154
+ ItemEnum :: ExternCrateItem { name : c. to_string ( ) , rename : a. map ( |x| x. to_string ( ) ) }
155
+ }
156
+ ImportItem ( i) => ItemEnum :: ImportItem ( i. into ( ) ) ,
157
+ StructItem ( s) => ItemEnum :: StructItem ( s. into ( ) ) ,
158
+ UnionItem ( u) => ItemEnum :: UnionItem ( u. into ( ) ) ,
159
+ StructFieldItem ( f) => ItemEnum :: StructFieldItem ( f. into ( ) ) ,
160
+ EnumItem ( e) => ItemEnum :: EnumItem ( e. into ( ) ) ,
161
+ VariantItem ( v) => ItemEnum :: VariantItem ( v. into ( ) ) ,
162
+ FunctionItem ( f) => ItemEnum :: FunctionItem ( f. into ( ) ) ,
163
+ ForeignFunctionItem ( f) => ItemEnum :: FunctionItem ( f. into ( ) ) ,
164
+ TraitItem ( t) => ItemEnum :: TraitItem ( t. into ( ) ) ,
165
+ TraitAliasItem ( t) => ItemEnum :: TraitAliasItem ( t. into ( ) ) ,
166
+ MethodItem ( m, _) => ItemEnum :: MethodItem ( from_function_method ( m, true ) ) ,
167
+ TyMethodItem ( m) => ItemEnum :: MethodItem ( from_function_method ( m, false ) ) ,
168
+ ImplItem ( i) => ItemEnum :: ImplItem ( i. into ( ) ) ,
169
+ StaticItem ( s) => ItemEnum :: StaticItem ( from_clean_static ( s, tcx) ) ,
170
+ ForeignStaticItem ( s) => ItemEnum :: StaticItem ( from_clean_static ( s, tcx) ) ,
171
+ ForeignTypeItem => ItemEnum :: ForeignTypeItem ,
172
+ TypedefItem ( t, _) => ItemEnum :: TypedefItem ( t. into ( ) ) ,
173
+ OpaqueTyItem ( t) => ItemEnum :: OpaqueTyItem ( t. into ( ) ) ,
174
+ ConstantItem ( c) => ItemEnum :: ConstantItem ( c. into ( ) ) ,
175
+ MacroItem ( m) => ItemEnum :: MacroItem ( m. source ) ,
176
+ ProcMacroItem ( m) => ItemEnum :: ProcMacroItem ( m. into ( ) ) ,
177
+ AssocConstItem ( t, s) => ItemEnum :: AssocConstItem { type_ : t. into ( ) , default : s } ,
178
+ AssocTypeItem ( g, t) => ItemEnum :: AssocTypeItem {
179
+ bounds : g. into_iter ( ) . map ( Into :: into) . collect ( ) ,
180
+ default : t. map ( Into :: into) ,
181
+ } ,
182
+ StrippedItem ( inner) => from_clean_item_kind ( * inner, tcx) . into ( ) ,
183
+ PrimitiveItem ( _) | KeywordItem ( _) => {
184
+ panic ! ( "{:?} is not supported for JSON output" , item)
185
185
}
186
186
}
187
187
}
@@ -535,13 +535,11 @@ impl From<clean::OpaqueTy> for OpaqueTy {
535
535
}
536
536
}
537
537
538
- impl From < clean:: Static > for Static {
539
- fn from ( stat : clean:: Static ) -> Self {
540
- Static {
541
- type_ : stat. type_ . into ( ) ,
542
- mutable : stat. mutability == ast:: Mutability :: Mut ,
543
- expr : stat. expr ,
544
- }
538
+ fn from_clean_static ( stat : clean:: Static , tcx : TyCtxt < ' _ > ) -> Static {
539
+ Static {
540
+ type_ : stat. type_ . into ( ) ,
541
+ mutable : stat. mutability == ast:: Mutability :: Mut ,
542
+ expr : stat. expr . map ( |e| print_const_expr ( tcx, e) ) . unwrap_or_default ( ) ,
545
543
}
546
544
}
547
545
0 commit comments