rustdoc: Convert new ItemId's to real Json Ids

This commit is contained in:
Justus K 2021-07-03 15:29:26 +02:00
parent 97c82d8731
commit 4b1027a317
No known key found for this signature in database
GPG Key ID: 8C62FE98A62FC462

View File

@ -5,9 +5,10 @@
#![allow(rustc::default_hash_types)] #![allow(rustc::default_hash_types)]
use std::convert::From; use std::convert::From;
use std::fmt;
use rustc_ast::ast; use rustc_ast::ast;
use rustc_hir::def::CtorKind; use rustc_hir::{def::CtorKind, def_id::DefId};
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_span::def_id::CRATE_DEF_INDEX; use rustc_span::def_id::CRATE_DEF_INDEX;
use rustc_span::Pos; use rustc_span::Pos;
@ -171,9 +172,23 @@ impl FromWithTcx<clean::TypeBindingKind> for TypeBindingKind {
} }
crate fn from_item_id(did: ItemId) -> Id { crate fn from_item_id(did: ItemId) -> Id {
struct DisplayDefId(DefId);
impl fmt::Display for DisplayDefId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}:{}", self.0.krate.as_u32(), u32::from(self.0.index))
}
}
match did { match did {
ItemId::DefId(did) => Id(format!("{}:{}", did.krate.as_u32(), u32::from(did.index))), ItemId::DefId(did) => Id(format!("{}", DisplayDefId(did))),
_ => todo!("how should json ItemId's be represented?"), ItemId::Blanket { for_, trait_ } => {
Id(format!("b:{}-{}", DisplayDefId(trait_), DisplayDefId(for_)))
}
ItemId::Auto { for_, trait_ } => {
Id(format!("a:{}-{}", DisplayDefId(trait_), DisplayDefId(for_)))
}
ItemId::Primitive(krate) => Id(format!("p:{}", krate.as_u32())),
} }
} }