Remove Item::kind, use tagged enum. Rename variants to match
This commit is contained in:
parent
51748a8fc7
commit
cf5246915b
3 changed files with 53 additions and 56 deletions
|
@ -23,7 +23,6 @@ use std::collections::HashSet;
|
||||||
|
|
||||||
impl JsonRenderer<'_> {
|
impl JsonRenderer<'_> {
|
||||||
pub(super) fn convert_item(&self, item: clean::Item) -> Option<Item> {
|
pub(super) fn convert_item(&self, item: clean::Item) -> Option<Item> {
|
||||||
let item_type = ItemType::from(&item);
|
|
||||||
let deprecation = item.deprecation(self.tcx);
|
let deprecation = item.deprecation(self.tcx);
|
||||||
let clean::Item { source, name, attrs, kind, visibility, def_id } = item;
|
let clean::Item { source, name, attrs, kind, visibility, def_id } = item;
|
||||||
let inner = match *kind {
|
let inner = match *kind {
|
||||||
|
@ -50,7 +49,6 @@ impl JsonRenderer<'_> {
|
||||||
.map(rustc_ast_pretty::pprust::attribute_to_string)
|
.map(rustc_ast_pretty::pprust::attribute_to_string)
|
||||||
.collect(),
|
.collect(),
|
||||||
deprecation: deprecation.map(from_deprecation),
|
deprecation: deprecation.map(from_deprecation),
|
||||||
kind: item_type.into(),
|
|
||||||
inner,
|
inner,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -154,30 +152,30 @@ crate fn from_def_id(did: DefId) -> Id {
|
||||||
fn from_clean_item_kind(item: clean::ItemKind, tcx: TyCtxt<'_>, name: &Option<Symbol>) -> ItemEnum {
|
fn from_clean_item_kind(item: clean::ItemKind, tcx: TyCtxt<'_>, name: &Option<Symbol>) -> ItemEnum {
|
||||||
use clean::ItemKind::*;
|
use clean::ItemKind::*;
|
||||||
match item {
|
match item {
|
||||||
ModuleItem(m) => ItemEnum::ModuleItem(m.into()),
|
ModuleItem(m) => ItemEnum::Module(m.into()),
|
||||||
ImportItem(i) => ItemEnum::ImportItem(i.into()),
|
ImportItem(i) => ItemEnum::Import(i.into()),
|
||||||
StructItem(s) => ItemEnum::StructItem(s.into()),
|
StructItem(s) => ItemEnum::Struct(s.into()),
|
||||||
UnionItem(u) => ItemEnum::UnionItem(u.into()),
|
UnionItem(u) => ItemEnum::Union(u.into()),
|
||||||
StructFieldItem(f) => ItemEnum::StructFieldItem(f.into()),
|
StructFieldItem(f) => ItemEnum::StructField(f.into()),
|
||||||
EnumItem(e) => ItemEnum::EnumItem(e.into()),
|
EnumItem(e) => ItemEnum::Enum(e.into()),
|
||||||
VariantItem(v) => ItemEnum::VariantItem(v.into()),
|
VariantItem(v) => ItemEnum::Variant(v.into()),
|
||||||
FunctionItem(f) => ItemEnum::FunctionItem(f.into()),
|
FunctionItem(f) => ItemEnum::Function(f.into()),
|
||||||
ForeignFunctionItem(f) => ItemEnum::FunctionItem(f.into()),
|
ForeignFunctionItem(f) => ItemEnum::Function(f.into()),
|
||||||
TraitItem(t) => ItemEnum::TraitItem(t.into()),
|
TraitItem(t) => ItemEnum::Trait(t.into()),
|
||||||
TraitAliasItem(t) => ItemEnum::TraitAliasItem(t.into()),
|
TraitAliasItem(t) => ItemEnum::TraitAlias(t.into()),
|
||||||
MethodItem(m, _) => ItemEnum::MethodItem(from_function_method(m, true)),
|
MethodItem(m, _) => ItemEnum::Method(from_function_method(m, true)),
|
||||||
TyMethodItem(m) => ItemEnum::MethodItem(from_function_method(m, false)),
|
TyMethodItem(m) => ItemEnum::Method(from_function_method(m, false)),
|
||||||
ImplItem(i) => ItemEnum::ImplItem(i.into()),
|
ImplItem(i) => ItemEnum::Impl(i.into()),
|
||||||
StaticItem(s) => ItemEnum::StaticItem(from_clean_static(s, tcx)),
|
StaticItem(s) => ItemEnum::Static(from_clean_static(s, tcx)),
|
||||||
ForeignStaticItem(s) => ItemEnum::StaticItem(from_clean_static(s, tcx)),
|
ForeignStaticItem(s) => ItemEnum::Static(from_clean_static(s, tcx)),
|
||||||
ForeignTypeItem => ItemEnum::ForeignTypeItem,
|
ForeignTypeItem => ItemEnum::ForeignType,
|
||||||
TypedefItem(t, _) => ItemEnum::TypedefItem(t.into()),
|
TypedefItem(t, _) => ItemEnum::Typedef(t.into()),
|
||||||
OpaqueTyItem(t) => ItemEnum::OpaqueTyItem(t.into()),
|
OpaqueTyItem(t) => ItemEnum::OpaqueTy(t.into()),
|
||||||
ConstantItem(c) => ItemEnum::ConstantItem(c.into()),
|
ConstantItem(c) => ItemEnum::Constant(c.into()),
|
||||||
MacroItem(m) => ItemEnum::MacroItem(m.source),
|
MacroItem(m) => ItemEnum::Macro(m.source),
|
||||||
ProcMacroItem(m) => ItemEnum::ProcMacroItem(m.into()),
|
ProcMacroItem(m) => ItemEnum::ProcMacro(m.into()),
|
||||||
AssocConstItem(t, s) => ItemEnum::AssocConstItem { type_: t.into(), default: s },
|
AssocConstItem(t, s) => ItemEnum::AssocConst { type_: t.into(), default: s },
|
||||||
AssocTypeItem(g, t) => ItemEnum::AssocTypeItem {
|
AssocTypeItem(g, t) => ItemEnum::AssocType {
|
||||||
bounds: g.into_iter().map(Into::into).collect(),
|
bounds: g.into_iter().map(Into::into).collect(),
|
||||||
default: t.map(Into::into),
|
default: t.map(Into::into),
|
||||||
},
|
},
|
||||||
|
@ -185,7 +183,7 @@ fn from_clean_item_kind(item: clean::ItemKind, tcx: TyCtxt<'_>, name: &Option<Sy
|
||||||
PrimitiveItem(_) | KeywordItem(_) => {
|
PrimitiveItem(_) | KeywordItem(_) => {
|
||||||
panic!("{:?} is not supported for JSON output", item)
|
panic!("{:?} is not supported for JSON output", item)
|
||||||
}
|
}
|
||||||
ExternCrateItem { ref src } => ItemEnum::ExternCrateItem {
|
ExternCrateItem { ref src } => ItemEnum::ExternCrate {
|
||||||
name: name.as_ref().unwrap().to_string(),
|
name: name.as_ref().unwrap().to_string(),
|
||||||
rename: src.map(|x| x.to_string()),
|
rename: src.map(|x| x.to_string()),
|
||||||
},
|
},
|
||||||
|
|
|
@ -108,8 +108,7 @@ impl JsonRenderer<'tcx> {
|
||||||
.last()
|
.last()
|
||||||
.map(Clone::clone),
|
.map(Clone::clone),
|
||||||
visibility: types::Visibility::Public,
|
visibility: types::Visibility::Public,
|
||||||
kind: types::ItemKind::Trait,
|
inner: types::ItemEnum::Trait(trait_item.clone().into()),
|
||||||
inner: types::ItemEnum::TraitItem(trait_item.clone().into()),
|
|
||||||
source: None,
|
source: None,
|
||||||
docs: Default::default(),
|
docs: Default::default(),
|
||||||
links: Default::default(),
|
links: Default::default(),
|
||||||
|
@ -158,11 +157,11 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> {
|
||||||
|
|
||||||
let id = item.def_id;
|
let id = item.def_id;
|
||||||
if let Some(mut new_item) = self.convert_item(item) {
|
if let Some(mut new_item) = self.convert_item(item) {
|
||||||
if let types::ItemEnum::TraitItem(ref mut t) = new_item.inner {
|
if let types::ItemEnum::Trait(ref mut t) = new_item.inner {
|
||||||
t.implementors = self.get_trait_implementors(id)
|
t.implementors = self.get_trait_implementors(id)
|
||||||
} else if let types::ItemEnum::StructItem(ref mut s) = new_item.inner {
|
} else if let types::ItemEnum::Struct(ref mut s) = new_item.inner {
|
||||||
s.impls = self.get_impls(id)
|
s.impls = self.get_impls(id)
|
||||||
} else if let types::ItemEnum::EnumItem(ref mut e) = new_item.inner {
|
} else if let types::ItemEnum::Enum(ref mut e) = new_item.inner {
|
||||||
e.impls = self.get_impls(id)
|
e.impls = self.get_impls(id)
|
||||||
}
|
}
|
||||||
let removed = self.index.borrow_mut().insert(from_def_id(id), new_item.clone());
|
let removed = self.index.borrow_mut().insert(from_def_id(id), new_item.clone());
|
||||||
|
|
|
@ -76,7 +76,7 @@ pub struct Item {
|
||||||
/// Stringified versions of the attributes on this item (e.g. `"#[inline]"`)
|
/// Stringified versions of the attributes on this item (e.g. `"#[inline]"`)
|
||||||
pub attrs: Vec<String>,
|
pub attrs: Vec<String>,
|
||||||
pub deprecation: Option<Deprecation>,
|
pub deprecation: Option<Deprecation>,
|
||||||
pub kind: ItemKind,
|
#[serde(flatten)]
|
||||||
pub inner: ItemEnum,
|
pub inner: ItemEnum,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,48 +185,48 @@ pub enum ItemKind {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||||
#[serde(untagged)]
|
#[serde(tag = "kind", content = "inner", rename_all = "snake_case")]
|
||||||
pub enum ItemEnum {
|
pub enum ItemEnum {
|
||||||
ModuleItem(Module),
|
Module(Module),
|
||||||
ExternCrateItem {
|
ExternCrate {
|
||||||
name: String,
|
name: String,
|
||||||
rename: Option<String>,
|
rename: Option<String>,
|
||||||
},
|
},
|
||||||
ImportItem(Import),
|
Import(Import),
|
||||||
|
|
||||||
UnionItem(Union),
|
Union(Union),
|
||||||
StructItem(Struct),
|
Struct(Struct),
|
||||||
StructFieldItem(Type),
|
StructField(Type),
|
||||||
EnumItem(Enum),
|
Enum(Enum),
|
||||||
VariantItem(Variant),
|
Variant(Variant),
|
||||||
|
|
||||||
FunctionItem(Function),
|
Function(Function),
|
||||||
|
|
||||||
TraitItem(Trait),
|
Trait(Trait),
|
||||||
TraitAliasItem(TraitAlias),
|
TraitAlias(TraitAlias),
|
||||||
MethodItem(Method),
|
Method(Method),
|
||||||
ImplItem(Impl),
|
Impl(Impl),
|
||||||
|
|
||||||
TypedefItem(Typedef),
|
Typedef(Typedef),
|
||||||
OpaqueTyItem(OpaqueTy),
|
OpaqueTy(OpaqueTy),
|
||||||
ConstantItem(Constant),
|
Constant(Constant),
|
||||||
|
|
||||||
StaticItem(Static),
|
Static(Static),
|
||||||
|
|
||||||
/// `type`s from an extern block
|
/// `type`s from an extern block
|
||||||
ForeignTypeItem,
|
ForeignType,
|
||||||
|
|
||||||
/// Declarative macro_rules! macro
|
/// Declarative macro_rules! macro
|
||||||
MacroItem(String),
|
Macro(String),
|
||||||
ProcMacroItem(ProcMacro),
|
ProcMacro(ProcMacro),
|
||||||
|
|
||||||
AssocConstItem {
|
AssocConst {
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
type_: Type,
|
type_: Type,
|
||||||
/// e.g. `const X: usize = 5;`
|
/// e.g. `const X: usize = 5;`
|
||||||
default: Option<String>,
|
default: Option<String>,
|
||||||
},
|
},
|
||||||
AssocTypeItem {
|
AssocType {
|
||||||
bounds: Vec<GenericBound>,
|
bounds: Vec<GenericBound>,
|
||||||
/// e.g. `type X = usize;`
|
/// e.g. `type X = usize;`
|
||||||
default: Option<Type>,
|
default: Option<Type>,
|
||||||
|
|
Loading…
Reference in a new issue