};
inline::record_extern_fqn(cx, did, kind);
let path = external_path(cx, did, false, vec![], substs);
- ResolvedPath { path, did }
+ ResolvedPath { path }
}
ty::Foreign(did) => {
inline::record_extern_fqn(cx, did, ItemType::ForeignType);
let path = external_path(cx, did, false, vec![], InternalSubsts::empty());
- ResolvedPath { path, did }
+ ResolvedPath { path }
}
ty::Dynamic(obj, ref reg) => {
// HACK: pick the first `did` as the `did` of the trait object. Someone
/// A named type, which could be a trait.
///
/// This is mostly Rustdoc's version of [`hir::Path`]. It has to be different because Rustdoc's [`PathSegment`] can contain cleaned generics.
- ResolvedPath { path: Path, did: DefId },
+ ResolvedPath { path: Path },
/// A `dyn Trait` object: `dyn for<'a> Trait<'a> + Send + 'static`
DynTrait(Vec<PolyTrait>, Option<Lifetime>),
/// A type parameter.
fn inner_def_id(&self, cache: Option<&Cache>) -> Option<DefId> {
let t: PrimitiveType = match *self {
- ResolvedPath { ref path, did: _ } => return Some(path.def_id()),
+ ResolvedPath { ref path } => return Some(path.def_id()),
DynTrait(ref bounds, _) => return Some(bounds[0].trait_.def_id()),
Primitive(p) => return cache.and_then(|c| c.primitive_locations.get(&p).cloned()),
BorrowedRef { type_: box Generic(..), .. } => PrimitiveType::Reference,
for &did in prim.impls(tcx).iter().filter(|did| !did.is_local()) {
inline::build_impl(cx, None, did, None, ret);
}
- } else if let ResolvedPath { did, .. } = *target {
+ } else if let ResolvedPath { path } = target {
+ let did = path.def_id();
if !did.is_local() {
inline::build_impls(cx, None, did, None, ret);
}
Res::SelfTy(..) if path.segments.len() == 1 => Generic(kw::SelfUpper),
Res::Def(DefKind::TyParam, _) if path.segments.len() == 1 => Generic(path.segments[0].name),
_ => {
- let did = register_res(cx, path.res);
- ResolvedPath { path, did }
+ let _ = register_res(cx, path.res);
+ ResolvedPath { path }
}
}
}
clean::ImplItem(ref i) => {
self.cache.parent_is_trait_impl = i.trait_.is_some();
match i.for_ {
- clean::ResolvedPath { did, .. } => {
- self.cache.parent_stack.push(did);
+ clean::ResolvedPath { ref path } => {
+ self.cache.parent_stack.push(path.def_id());
true
}
clean::DynTrait(ref bounds, _)
// Note: matching twice to restrict the lifetime of the `i` borrow.
let mut dids = FxHashSet::default();
match i.for_ {
- clean::ResolvedPath { did, .. }
- | clean::BorrowedRef { type_: box clean::ResolvedPath { did, .. }, .. } => {
- dids.insert(did);
+ clean::ResolvedPath { ref path }
+ | clean::BorrowedRef { type_: box clean::ResolvedPath { ref path }, .. } => {
+ dids.insert(path.def_id());
}
clean::DynTrait(ref bounds, _)
| clean::BorrowedRef { type_: box clean::DynTrait(ref bounds, _), .. } => {
match *t {
clean::Generic(name) => write!(f, "{}", name),
- clean::ResolvedPath { did, ref path } => {
+ clean::ResolvedPath { ref path } => {
// Paths like `T::Output` and `Self::Output` should be rendered with all segments.
+ let did = path.def_id();
resolved_path(f, did, path, path.is_assoc_ty(), use_absolute, cx)
}
clean::DynTrait(ref bounds, ref lt) => {
let mut ty_generics = Vec::new();
for bound in bound.get_bounds().unwrap_or(&[]) {
if let Some(path) = bound.get_trait_path() {
- let ty = Type::ResolvedPath { did: path.def_id(), path };
+ let ty = Type::ResolvedPath { path };
get_real_types(generics, &ty, tcx, recurse + 1, &mut ty_generics, cache);
}
}
| SelfTy::SelfExplicit(clean::BorrowedRef { mutability, .. }) => {
(mutability == Mutability::Mut, false, false)
}
- SelfTy::SelfExplicit(clean::ResolvedPath { did, .. }) => {
- (false, Some(did) == tcx.lang_items().owned_box(), false)
+ SelfTy::SelfExplicit(clean::ResolvedPath { path }) => {
+ (false, Some(path.def_id()) == tcx.lang_items().owned_box(), false)
}
SelfTy::SelfValue => (false, false, true),
_ => (false, false, false),
}
match ty {
- clean::Type::ResolvedPath { did, .. } => process_path(did),
+ clean::Type::ResolvedPath { path } => process_path(path.def_id()),
clean::Type::Tuple(tys) => {
work.extend(tys.into_iter());
}
let mut implementor_dups: FxHashMap<Symbol, (DefId, bool)> = FxHashMap::default();
for implementor in implementors {
match implementor.inner_impl().for_ {
- clean::ResolvedPath { ref path, did, .. }
- | clean::BorrowedRef {
- type_: box clean::ResolvedPath { ref path, did, .. }, ..
- } if !path.is_assoc_ty() => {
+ clean::ResolvedPath { ref path }
+ | clean::BorrowedRef { type_: box clean::ResolvedPath { ref path }, .. }
+ if !path.is_assoc_ty() =>
+ {
+ let did = path.def_id();
let &mut (prev_did, ref mut has_duplicates) =
implementor_dups.entry(path.last()).or_insert((did, false));
if prev_did != did {
match bound {
TraitBound(clean::PolyTrait { trait_, generic_params }, modifier) => {
// FIXME: should `trait_` be a clean::Path equivalent in JSON?
- let trait_ =
- clean::ResolvedPath { did: trait_.def_id(), path: trait_ }.into_tcx(tcx);
+ let trait_ = clean::ResolvedPath { path: trait_ }.into_tcx(tcx);
GenericBound::TraitBound {
trait_,
generic_params: generic_params.into_iter().map(|x| x.into_tcx(tcx)).collect(),
fn from_tcx(ty: clean::Type, tcx: TyCtxt<'_>) -> Self {
use clean::Type::*;
match ty {
- ResolvedPath { path, did } => Type::ResolvedPath {
+ ResolvedPath { path } => Type::ResolvedPath {
name: path.whole_name(),
- id: from_item_id(did.into()),
+ id: from_item_id(path.def_id().into()),
args: path.segments.last().map(|args| Box::new(args.clone().args.into_tcx(tcx))),
param_names: Vec::new(),
},
},
QPath { name, self_type, trait_, .. } => {
// FIXME: should `trait_` be a clean::Path equivalent in JSON?
- let trait_ = ResolvedPath { did: trait_.def_id(), path: trait_ }.into_tcx(tcx);
+ let trait_ = ResolvedPath { path: trait_ }.into_tcx(tcx);
Type::QualifiedPath {
name: name.to_string(),
self_type: Box::new((*self_type).into_tcx(tcx)),
let provided_trait_methods = impl_.provided_trait_methods(tcx);
let clean::Impl { unsafety, generics, trait_, for_, items, polarity, kind } = impl_;
// FIXME: should `trait_` be a clean::Path equivalent in JSON?
- let trait_ = trait_.map(|path| {
- let did = path.def_id();
- clean::ResolvedPath { path, did }.into_tcx(tcx)
- });
+ let trait_ = trait_.map(|path| clean::ResolvedPath { path }.into_tcx(tcx));
// FIXME: use something like ImplKind in JSON?
let (synthetic, blanket_impl) = match kind {
clean::ImplKind::Normal => (false, None),