Stop re-exporting Type::ResolvedPath

I would like to rename it to `Type::Path`, but then it can't be
re-exported since the name would conflict with the `Path` struct.
Usually enum variants are referred to using their qualified names in
Rust (and parts of rustdoc already do that with `clean::Type`), so this
is also more consistent with the language.
This commit is contained in:
Noah Lev 2021-11-24 12:27:37 -08:00
parent 8adb0b6d6c
commit d81deb33fa
9 changed files with 39 additions and 36 deletions

View file

@ -41,9 +41,8 @@ use crate::visit_ast::Module as DocModule;
use utils::*;
crate use utils::{get_auto_trait_and_blanket_impls, krate, register_res};
crate use self::types::*;
crate use self::utils::{get_auto_trait_and_blanket_impls, krate, register_res};
crate trait Clean<T> {
fn clean(&self, cx: &mut DocContext<'_>) -> T;
@ -1406,12 +1405,12 @@ impl<'tcx> Clean<Type> for Ty<'tcx> {
};
inline::record_extern_fqn(cx, did, kind);
let path = external_path(cx, did, false, vec![], substs);
ResolvedPath { path }
Type::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 }
Type::ResolvedPath { path }
}
ty::Dynamic(obj, ref reg) => {
// HACK: pick the first `did` as the `did` of the trait object. Someone

View file

@ -47,7 +47,7 @@ crate use self::ItemKind::*;
crate use self::SelfTy::*;
crate use self::Type::{
Array, BareFunction, BorrowedRef, DynTrait, Generic, ImplTrait, Infer, Primitive, QPath,
RawPointer, ResolvedPath, Slice, Tuple,
RawPointer, Slice, Tuple,
};
crate use self::Visibility::{Inherited, Public};
@ -1488,7 +1488,7 @@ impl Type {
/// Checks if this is a `T::Name` path for an associated type.
crate fn is_assoc_ty(&self) -> bool {
match self {
ResolvedPath { path, .. } => path.is_assoc_ty(),
Type::ResolvedPath { path, .. } => path.is_assoc_ty(),
_ => false,
}
}
@ -1502,7 +1502,7 @@ impl Type {
crate fn generics(&self) -> Option<Vec<&Type>> {
match self {
ResolvedPath { path, .. } => path.generics(),
Type::ResolvedPath { path, .. } => path.generics(),
_ => None,
}
}
@ -1525,7 +1525,7 @@ impl Type {
fn inner_def_id(&self, cache: Option<&Cache>) -> Option<DefId> {
let t: PrimitiveType = match *self {
ResolvedPath { ref path } => return Some(path.def_id()),
Type::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,

View file

@ -2,8 +2,7 @@ use crate::clean::auto_trait::AutoTraitFinder;
use crate::clean::blanket_impl::BlanketImplFinder;
use crate::clean::{
inline, Clean, Crate, ExternalCrate, Generic, GenericArg, GenericArgs, ImportSource, Item,
ItemKind, Lifetime, Path, PathSegment, Primitive, PrimitiveType, ResolvedPath, Type,
TypeBinding, Visibility,
ItemKind, Lifetime, Path, PathSegment, Primitive, PrimitiveType, Type, TypeBinding, Visibility,
};
use crate::core::DocContext;
use crate::formats::item_type::ItemType;
@ -187,7 +186,7 @@ crate fn build_deref_target_impls(cx: &mut DocContext<'_>, items: &[Item], ret:
for &did in prim.impls(tcx).iter().filter(|did| !did.is_local()) {
inline::build_impl(cx, None, did, None, ret);
}
} else if let ResolvedPath { path } = target {
} else if let Type::ResolvedPath { path } = target {
let did = path.def_id();
if !did.is_local() {
inline::build_impls(cx, None, did, None, ret);
@ -362,7 +361,7 @@ crate fn resolve_type(cx: &mut DocContext<'_>, path: Path) -> Type {
Res::Def(DefKind::TyParam, _) if path.segments.len() == 1 => Generic(path.segments[0].name),
_ => {
let _ = register_res(cx, path.res);
ResolvedPath { path }
Type::ResolvedPath { path }
}
}
}

View file

@ -401,7 +401,7 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> {
clean::ImplItem(ref i) => {
self.cache.parent_is_trait_impl = i.trait_.is_some();
match i.for_ {
clean::ResolvedPath { ref path } => {
clean::Type::ResolvedPath { ref path } => {
self.cache.parent_stack.push(path.def_id());
true
}
@ -436,8 +436,10 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> {
// Note: matching twice to restrict the lifetime of the `i` borrow.
let mut dids = FxHashSet::default();
match i.for_ {
clean::ResolvedPath { ref path }
| clean::BorrowedRef { type_: box clean::ResolvedPath { ref path }, .. } => {
clean::Type::ResolvedPath { ref path }
| clean::BorrowedRef {
type_: box clean::Type::ResolvedPath { ref path }, ..
} => {
dids.insert(path.def_id());
}
clean::DynTrait(ref bounds, _)

View file

@ -762,7 +762,7 @@ fn fmt_type<'cx>(
match *t {
clean::Generic(name) => write!(f, "{}", name),
clean::ResolvedPath { ref path } => {
clean::Type::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)

View file

@ -218,7 +218,7 @@ fn get_index_type(clean_type: &clean::Type, generics: Vec<TypeWithKind>) -> Rend
fn get_index_type_name(clean_type: &clean::Type, accept_generic: bool) -> Option<Symbol> {
match *clean_type {
clean::ResolvedPath { ref path, .. } => {
clean::Type::ResolvedPath { ref path, .. } => {
let path_segment = path.segments.last().unwrap();
Some(path_segment.name)
}

View file

@ -1227,7 +1227,7 @@ fn should_render_item(item: &clean::Item, deref_mut_: bool, tcx: TyCtxt<'_>) ->
| SelfTy::SelfExplicit(clean::BorrowedRef { mutability, .. }) => {
(mutability == Mutability::Mut, false, false)
}
SelfTy::SelfExplicit(clean::ResolvedPath { path }) => {
SelfTy::SelfExplicit(clean::Type::ResolvedPath { path }) => {
(false, Some(path.def_id()) == tcx.lang_items().owned_box(), false)
}
SelfTy::SelfValue => (false, false, true),

View file

@ -727,10 +727,10 @@ fn item_trait(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, t: &clean::Tra
let mut implementor_dups: FxHashMap<Symbol, (DefId, bool)> = FxHashMap::default();
for implementor in implementors {
match implementor.inner_impl().for_ {
clean::ResolvedPath { ref path }
| clean::BorrowedRef { type_: box clean::ResolvedPath { ref path }, .. }
if !path.is_assoc_ty() =>
{
clean::Type::ResolvedPath { ref path }
| clean::BorrowedRef {
type_: box clean::Type::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));
@ -1452,15 +1452,14 @@ fn render_implementor(
) {
// If there's already another implementor that has the same abridged name, use the
// full path, for example in `std::iter::ExactSizeIterator`
let use_absolute = match implementor.inner_impl().for_ {
clean::ResolvedPath { ref path, .. }
| clean::BorrowedRef { type_: box clean::ResolvedPath { ref path, .. }, .. }
if !path.is_assoc_ty() =>
{
implementor_dups[&path.last()].1
}
_ => false,
};
let use_absolute =
match implementor.inner_impl().for_ {
clean::Type::ResolvedPath { ref path, .. }
| clean::BorrowedRef {
type_: box clean::Type::ResolvedPath { ref path, .. }, ..
} if !path.is_assoc_ty() => implementor_dups[&path.last()].1,
_ => false,
};
render_impl(
w,
cx,

View file

@ -365,7 +365,7 @@ impl FromWithTcx<clean::GenericBound> for GenericBound {
match bound {
TraitBound(clean::PolyTrait { trait_, generic_params }, modifier) => {
// FIXME: should `trait_` be a clean::Path equivalent in JSON?
let trait_ = clean::ResolvedPath { path: trait_ }.into_tcx(tcx);
let trait_ = clean::Type::ResolvedPath { path: trait_ }.into_tcx(tcx);
GenericBound::TraitBound {
trait_,
generic_params: generic_params.into_iter().map(|x| x.into_tcx(tcx)).collect(),
@ -388,9 +388,13 @@ crate fn from_trait_bound_modifier(modifier: rustc_hir::TraitBoundModifier) -> T
impl FromWithTcx<clean::Type> for Type {
fn from_tcx(ty: clean::Type, tcx: TyCtxt<'_>) -> Self {
use clean::Type::*;
use clean::Type::{
Array, BareFunction, BorrowedRef, DynTrait, Generic, ImplTrait, Infer, Primitive,
QPath, RawPointer, Slice, Tuple,
};
match ty {
ResolvedPath { path } => Type::ResolvedPath {
clean::Type::ResolvedPath { path } => Type::ResolvedPath {
name: path.whole_name(),
id: from_item_id(path.def_id().into()),
args: path.segments.last().map(|args| Box::new(args.clone().args.into_tcx(tcx))),
@ -435,7 +439,7 @@ impl FromWithTcx<clean::Type> for Type {
},
QPath { name, self_type, trait_, .. } => {
// FIXME: should `trait_` be a clean::Path equivalent in JSON?
let trait_ = ResolvedPath { path: trait_ }.into_tcx(tcx);
let trait_ = clean::Type::ResolvedPath { path: trait_ }.into_tcx(tcx);
Type::QualifiedPath {
name: name.to_string(),
self_type: Box::new((*self_type).into_tcx(tcx)),
@ -501,7 +505,7 @@ impl FromWithTcx<clean::Impl> for Impl {
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| clean::ResolvedPath { path }.into_tcx(tcx));
let trait_ = trait_.map(|path| clean::Type::ResolvedPath { path }.into_tcx(tcx));
// FIXME: use something like ImplKind in JSON?
let (synthetic, blanket_impl) = match kind {
clean::ImplKind::Normal => (false, None),