@@ -6,12 +6,14 @@ use std::convert::From;
66
77use rustc_ast:: ast;
88use rustc_hir:: def:: CtorKind ;
9+ use rustc_middle:: ty:: TyCtxt ;
910use rustc_span:: def_id:: { DefId , CRATE_DEF_INDEX } ;
1011use rustc_span:: Pos ;
1112
1213use rustdoc_json_types:: * ;
1314
1415use crate :: clean;
16+ use crate :: clean:: utils:: print_const_expr;
1517use crate :: formats:: item_type:: ItemType ;
1618use crate :: json:: JsonRenderer ;
1719
@@ -43,7 +45,7 @@ impl JsonRenderer<'_> {
4345 . collect ( ) ,
4446 deprecation : deprecation. map ( from_deprecation) ,
4547 kind : item_type. into ( ) ,
46- inner : kind. into ( ) ,
48+ inner : from_clean_item_kind ( kind, self . tcx ) ,
4749 } ) ,
4850 }
4951 }
@@ -144,44 +146,42 @@ crate fn from_def_id(did: DefId) -> Id {
144146 Id ( format ! ( "{}:{}" , did. krate. as_u32( ) , u32 :: from( did. index) ) )
145147}
146148
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)
185185 }
186186 }
187187}
@@ -535,13 +535,11 @@ impl From<clean::OpaqueTy> for OpaqueTy {
535535 }
536536}
537537
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 ( ) ,
545543 }
546544}
547545
0 commit comments