mod global_item_id;
pub use global_item_id::GlobalItemId;
use rustdoc_types::{ItemEnum, ItemKind};
pub trait RustdocKindExt {
fn kind(&self) -> &'static str;
}
impl RustdocKindExt for ItemEnum {
fn kind(&self) -> &'static str {
match self {
ItemEnum::Module(_) => "a module",
ItemEnum::ExternCrate { .. } => "an external crate",
ItemEnum::Use(_) => "an import",
ItemEnum::Union(_) => "a union",
ItemEnum::Struct(_) => "a struct",
ItemEnum::StructField(_) => "a struct field",
ItemEnum::Enum(_) => "an enum",
ItemEnum::Variant(_) => "an enum variant",
ItemEnum::Function(func) => {
if let Some((param, _)) = func.sig.inputs.first()
&& param == "self"
{
"a method"
} else {
"a function"
}
}
ItemEnum::Trait(_) => "a trait",
ItemEnum::TraitAlias(_) => "a trait alias",
ItemEnum::Impl(_) => "an impl block",
ItemEnum::TypeAlias(_) => "a type alias",
ItemEnum::Constant { .. } => "a constant",
ItemEnum::Static(_) => "a static",
ItemEnum::ExternType => "a foreign type",
ItemEnum::Macro(_) => "a macro",
ItemEnum::ProcMacro(_) => "a procedural macro",
ItemEnum::Primitive(_) => "a primitive type",
ItemEnum::AssocConst { .. } => "an associated constant",
ItemEnum::AssocType { .. } => "an associated type",
}
}
}
pub trait ItemKindExt {
fn plural(&self) -> &'static str;
}
impl ItemKindExt for ItemKind {
fn plural(&self) -> &'static str {
match self {
ItemKind::Module => "modules",
ItemKind::ExternCrate => "extern crate declarations",
ItemKind::Use => "use declarations",
ItemKind::Struct => "structs",
ItemKind::StructField => "struct fields",
ItemKind::Union => "unions",
ItemKind::Enum => "enums",
ItemKind::Variant => "enum variants",
ItemKind::Function => "functions",
ItemKind::TypeAlias => "type aliases",
ItemKind::Constant => "constants",
ItemKind::Trait => "traits",
ItemKind::TraitAlias => "trait aliases",
ItemKind::Impl => "impl blocks",
ItemKind::Static => "statics",
ItemKind::ExternType => "extern types",
ItemKind::Macro => "macros",
ItemKind::ProcAttribute => "proc macro attributes",
ItemKind::ProcDerive => "derive macros",
ItemKind::AssocConst => "associated constants",
ItemKind::AssocType => "associated types",
ItemKind::Primitive => "primitive types",
ItemKind::Keyword => "keywords",
ItemKind::Attribute => "attributes",
}
}
}