.tcx
.type_of(cx.tcx.hir().body_owner_def_id(self.value.body).to_def_id())
.clean(cx),
- expr: print_const_expr(cx, self.value.body),
+ expr: print_const_expr(cx.tcx, self.value.body),
value: None,
is_literal: is_literal_expr(cx, self.value.body.hir_id),
}
cx.with_param_env(local_did, || {
let inner = match self.kind {
hir::TraitItemKind::Const(ref ty, default) => {
- AssocConstItem(ty.clean(cx), default.map(|e| print_const_expr(cx, e)))
+ AssocConstItem(ty.clean(cx), default.map(|e| print_const_expr(cx.tcx, e)))
}
hir::TraitItemKind::Fn(ref sig, hir::TraitFn::Provided(body)) => {
let mut m = (sig, &self.generics, body).clean(cx);
cx.with_param_env(local_did, || {
let inner = match self.kind {
hir::ImplItemKind::Const(ref ty, expr) => {
- AssocConstItem(ty.clean(cx), Some(print_const_expr(cx, expr)))
+ AssocConstItem(ty.clean(cx), Some(print_const_expr(cx.tcx, expr)))
}
hir::ImplItemKind::Fn(ref sig, body) => {
let mut m = (sig, &self.generics, body).clean(cx);
let mut name = renamed.unwrap_or_else(|| cx.tcx.hir().name(item.hir_id));
cx.with_param_env(def_id, || {
let kind = match item.kind {
- ItemKind::Static(ty, mutability, body_id) => StaticItem(Static {
- type_: ty.clean(cx),
- mutability,
- expr: print_const_expr(cx, body_id),
- }),
+ ItemKind::Static(ty, mutability, body_id) => {
+ StaticItem(Static { type_: ty.clean(cx), mutability, expr: Some(body_id) })
+ }
ItemKind::Const(ty, body_id) => ConstantItem(Constant {
type_: ty.clean(cx),
- expr: print_const_expr(cx, body_id),
+ expr: print_const_expr(cx.tcx, body_id),
value: print_evaluated_const(cx, def_id),
is_literal: is_literal_expr(cx, body_id.hir_id),
}),
},
})
}
- hir::ForeignItemKind::Static(ref ty, mutability) => ForeignStaticItem(Static {
- type_: ty.clean(cx),
- mutability,
- expr: String::new(),
- }),
+ hir::ForeignItemKind::Static(ref ty, mutability) => {
+ ForeignStaticItem(Static { type_: ty.clean(cx), mutability, expr: None })
+ }
hir::ForeignItemKind::Type => ForeignTypeItem,
};
use rustc_ast::ast;
use rustc_hir::def::CtorKind;
+use rustc_middle::ty::TyCtxt;
use rustc_span::def_id::{DefId, CRATE_DEF_INDEX};
use rustc_span::Pos;
use rustdoc_json_types::*;
use crate::clean;
+use crate::clean::utils::print_const_expr;
use crate::formats::item_type::ItemType;
use crate::json::JsonRenderer;
.collect(),
deprecation: deprecation.map(from_deprecation),
kind: item_type.into(),
- inner: kind.into(),
+ inner: from_clean_item_kind(kind, self.tcx),
}),
}
}
Id(format!("{}:{}", did.krate.as_u32(), u32::from(did.index)))
}
-impl From<clean::ItemKind> for ItemEnum {
- fn from(item: clean::ItemKind) -> Self {
- use clean::ItemKind::*;
- match item {
- ModuleItem(m) => ItemEnum::ModuleItem(m.into()),
- ExternCrateItem(c, a) => {
- ItemEnum::ExternCrateItem { name: c.to_string(), rename: a.map(|x| x.to_string()) }
- }
- ImportItem(i) => ItemEnum::ImportItem(i.into()),
- StructItem(s) => ItemEnum::StructItem(s.into()),
- UnionItem(u) => ItemEnum::UnionItem(u.into()),
- StructFieldItem(f) => ItemEnum::StructFieldItem(f.into()),
- EnumItem(e) => ItemEnum::EnumItem(e.into()),
- VariantItem(v) => ItemEnum::VariantItem(v.into()),
- FunctionItem(f) => ItemEnum::FunctionItem(f.into()),
- ForeignFunctionItem(f) => ItemEnum::FunctionItem(f.into()),
- TraitItem(t) => ItemEnum::TraitItem(t.into()),
- TraitAliasItem(t) => ItemEnum::TraitAliasItem(t.into()),
- MethodItem(m, _) => ItemEnum::MethodItem(from_function_method(m, true)),
- TyMethodItem(m) => ItemEnum::MethodItem(from_function_method(m, false)),
- ImplItem(i) => ItemEnum::ImplItem(i.into()),
- StaticItem(s) => ItemEnum::StaticItem(s.into()),
- ForeignStaticItem(s) => ItemEnum::StaticItem(s.into()),
- ForeignTypeItem => ItemEnum::ForeignTypeItem,
- TypedefItem(t, _) => ItemEnum::TypedefItem(t.into()),
- OpaqueTyItem(t) => ItemEnum::OpaqueTyItem(t.into()),
- ConstantItem(c) => ItemEnum::ConstantItem(c.into()),
- MacroItem(m) => ItemEnum::MacroItem(m.source),
- ProcMacroItem(m) => ItemEnum::ProcMacroItem(m.into()),
- AssocConstItem(t, s) => ItemEnum::AssocConstItem { type_: t.into(), default: s },
- AssocTypeItem(g, t) => ItemEnum::AssocTypeItem {
- bounds: g.into_iter().map(Into::into).collect(),
- default: t.map(Into::into),
- },
- StrippedItem(inner) => (*inner).into(),
- PrimitiveItem(_) | KeywordItem(_) => {
- panic!("{:?} is not supported for JSON output", item)
- }
+fn from_clean_item_kind(item: clean::ItemKind, tcx: TyCtxt<'_>) -> ItemEnum {
+ use clean::ItemKind::*;
+ match item {
+ ModuleItem(m) => ItemEnum::ModuleItem(m.into()),
+ ExternCrateItem(c, a) => {
+ ItemEnum::ExternCrateItem { name: c.to_string(), rename: a.map(|x| x.to_string()) }
+ }
+ ImportItem(i) => ItemEnum::ImportItem(i.into()),
+ StructItem(s) => ItemEnum::StructItem(s.into()),
+ UnionItem(u) => ItemEnum::UnionItem(u.into()),
+ StructFieldItem(f) => ItemEnum::StructFieldItem(f.into()),
+ EnumItem(e) => ItemEnum::EnumItem(e.into()),
+ VariantItem(v) => ItemEnum::VariantItem(v.into()),
+ FunctionItem(f) => ItemEnum::FunctionItem(f.into()),
+ ForeignFunctionItem(f) => ItemEnum::FunctionItem(f.into()),
+ TraitItem(t) => ItemEnum::TraitItem(t.into()),
+ TraitAliasItem(t) => ItemEnum::TraitAliasItem(t.into()),
+ MethodItem(m, _) => ItemEnum::MethodItem(from_function_method(m, true)),
+ TyMethodItem(m) => ItemEnum::MethodItem(from_function_method(m, false)),
+ ImplItem(i) => ItemEnum::ImplItem(i.into()),
+ StaticItem(s) => ItemEnum::StaticItem(from_clean_static(s, tcx)),
+ ForeignStaticItem(s) => ItemEnum::StaticItem(from_clean_static(s, tcx)),
+ ForeignTypeItem => ItemEnum::ForeignTypeItem,
+ TypedefItem(t, _) => ItemEnum::TypedefItem(t.into()),
+ OpaqueTyItem(t) => ItemEnum::OpaqueTyItem(t.into()),
+ ConstantItem(c) => ItemEnum::ConstantItem(c.into()),
+ MacroItem(m) => ItemEnum::MacroItem(m.source),
+ ProcMacroItem(m) => ItemEnum::ProcMacroItem(m.into()),
+ AssocConstItem(t, s) => ItemEnum::AssocConstItem { type_: t.into(), default: s },
+ AssocTypeItem(g, t) => ItemEnum::AssocTypeItem {
+ bounds: g.into_iter().map(Into::into).collect(),
+ default: t.map(Into::into),
+ },
+ StrippedItem(inner) => from_clean_item_kind(*inner, tcx).into(),
+ PrimitiveItem(_) | KeywordItem(_) => {
+ panic!("{:?} is not supported for JSON output", item)
}
}
}
}
}
-impl From<clean::Static> for Static {
- fn from(stat: clean::Static) -> Self {
- Static {
- type_: stat.type_.into(),
- mutable: stat.mutability == ast::Mutability::Mut,
- expr: stat.expr,
- }
+fn from_clean_static(stat: clean::Static, tcx: TyCtxt<'_>) -> Static {
+ Static {
+ type_: stat.type_.into(),
+ mutable: stat.mutability == ast::Mutability::Mut,
+ expr: stat.expr.map(|e| print_const_expr(tcx, e)).unwrap_or_default(),
}
}