|
5 | 5 | #![allow(rustc::default_hash_types)]
|
6 | 6 |
|
7 | 7 | use std::convert::From;
|
| 8 | +use std::fmt; |
8 | 9 |
|
9 | 10 | use rustc_ast::ast;
|
10 |
| -use rustc_hir::def::CtorKind; |
| 11 | +use rustc_hir::{def::CtorKind, def_id::DefId}; |
11 | 12 | use rustc_middle::ty::TyCtxt;
|
12 | 13 | use rustc_span::def_id::CRATE_DEF_INDEX;
|
13 | 14 | use rustc_span::Pos;
|
@@ -171,9 +172,23 @@ impl FromWithTcx<clean::TypeBindingKind> for TypeBindingKind {
|
171 | 172 | }
|
172 | 173 |
|
173 | 174 | crate fn from_item_id(did: ItemId) -> Id {
|
| 175 | + struct DisplayDefId(DefId); |
| 176 | + |
| 177 | + impl fmt::Display for DisplayDefId { |
| 178 | + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 179 | + write!(f, "{}:{}", self.0.krate.as_u32(), u32::from(self.0.index)) |
| 180 | + } |
| 181 | + } |
| 182 | + |
174 | 183 | match did {
|
175 |
| - ItemId::DefId(did) => Id(format!("{}:{}", did.krate.as_u32(), u32::from(did.index))), |
176 |
| - _ => todo!("how should json ItemId's be represented?"), |
| 184 | + ItemId::DefId(did) => Id(format!("{}", DisplayDefId(did))), |
| 185 | + ItemId::Blanket { for_, trait_ } => { |
| 186 | + Id(format!("b:{}-{}", DisplayDefId(trait_), DisplayDefId(for_))) |
| 187 | + } |
| 188 | + ItemId::Auto { for_, trait_ } => { |
| 189 | + Id(format!("a:{}-{}", DisplayDefId(trait_), DisplayDefId(for_))) |
| 190 | + } |
| 191 | + ItemId::Primitive(krate) => Id(format!("p:{}", krate.as_u32())), |
177 | 192 | }
|
178 | 193 | }
|
179 | 194 |
|
|
0 commit comments