Skip to content

Commit 8972f38

Browse files
committed
Use FromClean for Item.
1 parent 79831ca commit 8972f38

File tree

1 file changed

+84
-80
lines changed

1 file changed

+84
-80
lines changed

src/librustdoc/json/conversions.rs

Lines changed: 84 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ impl JsonRenderer<'_> {
5656
clean::ModuleItem(_)
5757
if self.imported_items.contains(&item_id.expect_def_id()) =>
5858
{
59-
from_clean_item(item, self)
59+
item.into_json(self)
6060
}
6161
_ => return None,
6262
}
6363
}
64-
_ => from_clean_item(item, self),
64+
_ => item.into_json(self),
6565
};
6666
Some(Item {
6767
id,
@@ -254,86 +254,90 @@ impl FromClean<clean::AssocItemConstraintKind> for AssocItemConstraintKind {
254254
}
255255
}
256256

257-
fn from_clean_item(item: &clean::Item, renderer: &JsonRenderer<'_>) -> ItemEnum {
258-
use clean::ItemKind::*;
259-
let name = item.name;
260-
let is_crate = item.is_crate();
261-
let header = item.fn_header(renderer.tcx);
262-
263-
match &item.inner.kind {
264-
ModuleItem(m) => {
265-
ItemEnum::Module(Module { is_crate, items: renderer.ids(&m.items), is_stripped: false })
266-
}
267-
ImportItem(i) => ItemEnum::Use(i.into_json(renderer)),
268-
StructItem(s) => ItemEnum::Struct(s.into_json(renderer)),
269-
UnionItem(u) => ItemEnum::Union(u.into_json(renderer)),
270-
StructFieldItem(f) => ItemEnum::StructField(f.into_json(renderer)),
271-
EnumItem(e) => ItemEnum::Enum(e.into_json(renderer)),
272-
VariantItem(v) => ItemEnum::Variant(v.into_json(renderer)),
273-
FunctionItem(f) => ItemEnum::Function((f, true, header.unwrap()).into_json(renderer)),
274-
ForeignFunctionItem(f, _) => {
275-
ItemEnum::Function((f, false, header.unwrap()).into_json(renderer))
276-
}
277-
TraitItem(t) => ItemEnum::Trait(t.into_json(renderer)),
278-
TraitAliasItem(t) => ItemEnum::TraitAlias(t.into_json(renderer)),
279-
MethodItem(m, _) => ItemEnum::Function((m, true, header.unwrap()).into_json(renderer)),
280-
RequiredMethodItem(m) => {
281-
ItemEnum::Function((m, false, header.unwrap()).into_json(renderer))
282-
}
283-
ImplItem(i) => ItemEnum::Impl(i.into_json(renderer)),
284-
StaticItem(s) => ItemEnum::Static((s, rustc_hir::Safety::Safe).into_json(renderer)),
285-
ForeignStaticItem(s, safety) => ItemEnum::Static((s, *safety).into_json(renderer)),
286-
ForeignTypeItem => ItemEnum::ExternType,
287-
TypeAliasItem(t) => ItemEnum::TypeAlias(t.into_json(renderer)),
288-
// FIXME(generic_const_items): Add support for generic free consts
289-
ConstantItem(ci) => ItemEnum::Constant {
290-
type_: ci.type_.into_json(renderer),
291-
const_: ci.kind.into_json(renderer),
292-
},
293-
MacroItem(m) => ItemEnum::Macro(m.source.clone()),
294-
ProcMacroItem(m) => ItemEnum::ProcMacro(m.into_json(renderer)),
295-
PrimitiveItem(p) => {
296-
ItemEnum::Primitive(Primitive {
297-
name: p.as_sym().to_string(),
298-
impls: Vec::new(), // Added in JsonRenderer::item
299-
})
300-
}
301-
// FIXME(generic_const_items): Add support for generic associated consts.
302-
RequiredAssocConstItem(_generics, ty) => {
303-
ItemEnum::AssocConst { type_: ty.into_json(renderer), value: None }
304-
}
305-
// FIXME(generic_const_items): Add support for generic associated consts.
306-
ProvidedAssocConstItem(ci) | ImplAssocConstItem(ci) => ItemEnum::AssocConst {
307-
type_: ci.type_.into_json(renderer),
308-
value: Some(ci.kind.expr(renderer.tcx)),
309-
},
310-
RequiredAssocTypeItem(g, b) => ItemEnum::AssocType {
311-
generics: g.into_json(renderer),
312-
bounds: b.into_json(renderer),
313-
type_: None,
314-
},
315-
AssocTypeItem(t, b) => ItemEnum::AssocType {
316-
generics: t.generics.into_json(renderer),
317-
bounds: b.into_json(renderer),
318-
type_: Some(t.item_type.as_ref().unwrap_or(&t.type_).into_json(renderer)),
319-
},
320-
// `convert_item` early returns `None` for stripped items and keywords.
321-
KeywordItem => unreachable!(),
322-
StrippedItem(inner) => {
323-
match inner.as_ref() {
324-
ModuleItem(m) => ItemEnum::Module(Module {
325-
is_crate,
326-
items: renderer.ids(&m.items),
327-
is_stripped: true,
328-
}),
329-
// `convert_item` early returns `None` for stripped items we're not including
330-
_ => unreachable!(),
257+
impl FromClean<clean::Item> for ItemEnum {
258+
fn from_clean(item: &clean::Item, renderer: &JsonRenderer<'_>) -> Self {
259+
use clean::ItemKind::*;
260+
let name = item.name;
261+
let is_crate = item.is_crate();
262+
let header = item.fn_header(renderer.tcx);
263+
264+
match &item.inner.kind {
265+
ModuleItem(m) => ItemEnum::Module(Module {
266+
is_crate,
267+
items: renderer.ids(&m.items),
268+
is_stripped: false,
269+
}),
270+
ImportItem(i) => ItemEnum::Use(i.into_json(renderer)),
271+
StructItem(s) => ItemEnum::Struct(s.into_json(renderer)),
272+
UnionItem(u) => ItemEnum::Union(u.into_json(renderer)),
273+
StructFieldItem(f) => ItemEnum::StructField(f.into_json(renderer)),
274+
EnumItem(e) => ItemEnum::Enum(e.into_json(renderer)),
275+
VariantItem(v) => ItemEnum::Variant(v.into_json(renderer)),
276+
FunctionItem(f) => ItemEnum::Function((f, true, header.unwrap()).into_json(renderer)),
277+
ForeignFunctionItem(f, _) => {
278+
ItemEnum::Function((f, false, header.unwrap()).into_json(renderer))
279+
}
280+
TraitItem(t) => ItemEnum::Trait(t.into_json(renderer)),
281+
TraitAliasItem(t) => ItemEnum::TraitAlias(t.into_json(renderer)),
282+
MethodItem(m, _) => ItemEnum::Function((m, true, header.unwrap()).into_json(renderer)),
283+
RequiredMethodItem(m) => {
284+
ItemEnum::Function((m, false, header.unwrap()).into_json(renderer))
285+
}
286+
ImplItem(i) => ItemEnum::Impl(i.into_json(renderer)),
287+
StaticItem(s) => ItemEnum::Static((s, rustc_hir::Safety::Safe).into_json(renderer)),
288+
ForeignStaticItem(s, safety) => ItemEnum::Static((s, *safety).into_json(renderer)),
289+
ForeignTypeItem => ItemEnum::ExternType,
290+
TypeAliasItem(t) => ItemEnum::TypeAlias(t.into_json(renderer)),
291+
// FIXME(generic_const_items): Add support for generic free consts
292+
ConstantItem(ci) => ItemEnum::Constant {
293+
type_: ci.type_.into_json(renderer),
294+
const_: ci.kind.into_json(renderer),
295+
},
296+
MacroItem(m) => ItemEnum::Macro(m.source.clone()),
297+
ProcMacroItem(m) => ItemEnum::ProcMacro(m.into_json(renderer)),
298+
PrimitiveItem(p) => {
299+
ItemEnum::Primitive(Primitive {
300+
name: p.as_sym().to_string(),
301+
impls: Vec::new(), // Added in JsonRenderer::item
302+
})
331303
}
304+
// FIXME(generic_const_items): Add support for generic associated consts.
305+
RequiredAssocConstItem(_generics, ty) => {
306+
ItemEnum::AssocConst { type_: ty.into_json(renderer), value: None }
307+
}
308+
// FIXME(generic_const_items): Add support for generic associated consts.
309+
ProvidedAssocConstItem(ci) | ImplAssocConstItem(ci) => ItemEnum::AssocConst {
310+
type_: ci.type_.into_json(renderer),
311+
value: Some(ci.kind.expr(renderer.tcx)),
312+
},
313+
RequiredAssocTypeItem(g, b) => ItemEnum::AssocType {
314+
generics: g.into_json(renderer),
315+
bounds: b.into_json(renderer),
316+
type_: None,
317+
},
318+
AssocTypeItem(t, b) => ItemEnum::AssocType {
319+
generics: t.generics.into_json(renderer),
320+
bounds: b.into_json(renderer),
321+
type_: Some(t.item_type.as_ref().unwrap_or(&t.type_).into_json(renderer)),
322+
},
323+
// `convert_item` early returns `None` for stripped items and keywords.
324+
KeywordItem => unreachable!(),
325+
StrippedItem(inner) => {
326+
match inner.as_ref() {
327+
ModuleItem(m) => ItemEnum::Module(Module {
328+
is_crate,
329+
items: renderer.ids(&m.items),
330+
is_stripped: true,
331+
}),
332+
// `convert_item` early returns `None` for stripped items we're not including
333+
_ => unreachable!(),
334+
}
335+
}
336+
ExternCrateItem { src } => ItemEnum::ExternCrate {
337+
name: name.as_ref().unwrap().to_string(),
338+
rename: src.map(|x| x.to_string()),
339+
},
332340
}
333-
ExternCrateItem { src } => ItemEnum::ExternCrate {
334-
name: name.as_ref().unwrap().to_string(),
335-
rename: src.map(|x| x.to_string()),
336-
},
337341
}
338342
}
339343

0 commit comments

Comments
 (0)