Skip to content

Commit 9437b1b

Browse files
committed
Convert from_clean_item into a FromClean impl.
For consistency with most other types.
1 parent 9196f47 commit 9437b1b

File tree

1 file changed

+90
-84
lines changed

1 file changed

+90
-84
lines changed

src/librustdoc/json/conversions.rs

Lines changed: 90 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ impl JsonRenderer<'_> {
5555
clean::ModuleItem(_)
5656
if self.imported_items.contains(&item_id.expect_def_id()) =>
5757
{
58-
from_clean_item(item, self)
58+
item.into_json(self)
5959
}
6060
_ => return None,
6161
}
6262
}
63-
_ => from_clean_item(item, self),
63+
_ => item.into_json(self),
6464
};
6565
Some(Item {
6666
id,
@@ -256,90 +256,96 @@ impl FromClean<clean::AssocItemConstraintKind> for AssocItemConstraintKind {
256256
}
257257
}
258258

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

0 commit comments

Comments
 (0)