Rollup merge of #97288 - compiler-errors:tcxify-rustdoc, r=Dylan-DPC
Lifetime variance fixes for rustdoc #97287 migrates rustc to a `Ty` type that is invariant over its lifetime `'tcx`, so I need to fix a bunch of places that assume that `Ty<'a>` and `Ty<'b>` can be unified by shortening both to some common lifetime. This is doable, since everything is already `'tcx`, so all this PR does is be a bit more explicit that elided lifetimes are actually `'tcx`. Split out from #97287 so the rustdoc team can review independently.
This commit is contained in:
commit
3569a426b5
@ -343,12 +343,12 @@ pub struct GenericArgs<'hir> {
|
||||
pub span_ext: Span,
|
||||
}
|
||||
|
||||
impl GenericArgs<'_> {
|
||||
impl<'hir> GenericArgs<'hir> {
|
||||
pub const fn none() -> Self {
|
||||
Self { args: &[], bindings: &[], parenthesized: false, span_ext: DUMMY_SP }
|
||||
}
|
||||
|
||||
pub fn inputs(&self) -> &[Ty<'_>] {
|
||||
pub fn inputs(&self) -> &[Ty<'hir>] {
|
||||
if self.parenthesized {
|
||||
for arg in self.args {
|
||||
match arg {
|
||||
@ -549,7 +549,7 @@ impl<'hir> Generics<'hir> {
|
||||
&NOPE
|
||||
}
|
||||
|
||||
pub fn get_named(&self, name: Symbol) -> Option<&GenericParam<'_>> {
|
||||
pub fn get_named(&self, name: Symbol) -> Option<&GenericParam<'hir>> {
|
||||
for param in self.params {
|
||||
if name == param.name.ident().name {
|
||||
return Some(param);
|
||||
@ -608,7 +608,7 @@ impl<'hir> Generics<'hir> {
|
||||
pub fn bounds_for_param(
|
||||
&self,
|
||||
param_def_id: LocalDefId,
|
||||
) -> impl Iterator<Item = &WhereBoundPredicate<'_>> {
|
||||
) -> impl Iterator<Item = &WhereBoundPredicate<'hir>> {
|
||||
self.predicates.iter().filter_map(move |pred| match pred {
|
||||
WherePredicate::BoundPredicate(bp) if bp.is_param_bound(param_def_id.to_def_id()) => {
|
||||
Some(bp)
|
||||
|
@ -218,7 +218,7 @@ pub(crate) fn build_external_trait(cx: &mut DocContext<'_>, did: DefId) -> clean
|
||||
}
|
||||
}
|
||||
|
||||
fn build_external_function(cx: &mut DocContext<'_>, did: DefId) -> clean::Function {
|
||||
fn build_external_function<'tcx>(cx: &mut DocContext<'tcx>, did: DefId) -> clean::Function {
|
||||
let sig = cx.tcx.fn_sig(did);
|
||||
|
||||
let predicates = cx.tcx.predicates_of(did);
|
||||
|
@ -44,12 +44,12 @@ use utils::*;
|
||||
pub(crate) use self::types::*;
|
||||
pub(crate) use self::utils::{get_auto_trait_and_blanket_impls, krate, register_res};
|
||||
|
||||
pub(crate) trait Clean<T> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> T;
|
||||
pub(crate) trait Clean<'tcx, T> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> T;
|
||||
}
|
||||
|
||||
impl Clean<Item> for DocModule<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for DocModule<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
let mut items: Vec<Item> = vec![];
|
||||
items.extend(
|
||||
self.foreigns
|
||||
@ -89,14 +89,14 @@ impl Clean<Item> for DocModule<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Attributes> for [ast::Attribute] {
|
||||
impl<'tcx> Clean<'tcx, Attributes> for [ast::Attribute] {
|
||||
fn clean(&self, _cx: &mut DocContext<'_>) -> Attributes {
|
||||
Attributes::from_ast(self, None)
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Option<GenericBound>> for hir::GenericBound<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Option<GenericBound> {
|
||||
impl<'tcx> Clean<'tcx, Option<GenericBound>> for hir::GenericBound<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Option<GenericBound> {
|
||||
Some(match *self {
|
||||
hir::GenericBound::Outlives(lt) => GenericBound::Outlives(lt.clean(cx)),
|
||||
hir::GenericBound::LangItemTrait(lang_item, span, _, generic_args) => {
|
||||
@ -131,9 +131,9 @@ impl Clean<Option<GenericBound>> for hir::GenericBound<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_trait_ref_with_bindings(
|
||||
cx: &mut DocContext<'_>,
|
||||
trait_ref: ty::TraitRef<'_>,
|
||||
fn clean_trait_ref_with_bindings<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
trait_ref: ty::TraitRef<'tcx>,
|
||||
bindings: &[TypeBinding],
|
||||
) -> Path {
|
||||
let kind = cx.tcx.def_kind(trait_ref.def_id).into();
|
||||
@ -148,15 +148,15 @@ fn clean_trait_ref_with_bindings(
|
||||
path
|
||||
}
|
||||
|
||||
impl Clean<Path> for ty::TraitRef<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Path {
|
||||
impl<'tcx> Clean<'tcx, Path> for ty::TraitRef<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Path {
|
||||
clean_trait_ref_with_bindings(cx, *self, &[])
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_poly_trait_ref_with_bindings(
|
||||
cx: &mut DocContext<'_>,
|
||||
poly_trait_ref: ty::PolyTraitRef<'_>,
|
||||
fn clean_poly_trait_ref_with_bindings<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
poly_trait_ref: ty::PolyTraitRef<'tcx>,
|
||||
bindings: &[TypeBinding],
|
||||
) -> GenericBound {
|
||||
let poly_trait_ref = poly_trait_ref.lift_to_tcx(cx.tcx).unwrap();
|
||||
@ -182,14 +182,14 @@ fn clean_poly_trait_ref_with_bindings(
|
||||
)
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<GenericBound> for ty::PolyTraitRef<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> GenericBound {
|
||||
impl<'tcx> Clean<'tcx, GenericBound> for ty::PolyTraitRef<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> GenericBound {
|
||||
clean_poly_trait_ref_with_bindings(cx, *self, &[])
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Lifetime> for hir::Lifetime {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Lifetime {
|
||||
impl<'tcx> Clean<'tcx, Lifetime> for hir::Lifetime {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Lifetime {
|
||||
let def = cx.tcx.named_region(self.hir_id);
|
||||
if let Some(
|
||||
rl::Region::EarlyBound(_, node_id)
|
||||
@ -205,8 +205,8 @@ impl Clean<Lifetime> for hir::Lifetime {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Constant> for hir::ConstArg {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Constant {
|
||||
impl<'tcx> Clean<'tcx, Constant> for hir::ConstArg {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Constant {
|
||||
Constant {
|
||||
type_: cx
|
||||
.tcx
|
||||
@ -217,7 +217,7 @@ impl Clean<Constant> for hir::ConstArg {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Option<Lifetime>> for ty::Region<'_> {
|
||||
impl<'tcx> Clean<'tcx, Option<Lifetime>> for ty::Region<'tcx> {
|
||||
fn clean(&self, _cx: &mut DocContext<'_>) -> Option<Lifetime> {
|
||||
match **self {
|
||||
ty::ReStatic => Some(Lifetime::statik()),
|
||||
@ -239,8 +239,8 @@ impl Clean<Option<Lifetime>> for ty::Region<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Option<WherePredicate>> for hir::WherePredicate<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Option<WherePredicate> {
|
||||
impl<'tcx> Clean<'tcx, Option<WherePredicate>> for hir::WherePredicate<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Option<WherePredicate> {
|
||||
if !self.in_where_clause() {
|
||||
return None;
|
||||
}
|
||||
@ -279,8 +279,8 @@ impl Clean<Option<WherePredicate>> for hir::WherePredicate<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Clean<Option<WherePredicate>> for ty::Predicate<'a> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Option<WherePredicate> {
|
||||
impl<'tcx> Clean<'tcx, Option<WherePredicate>> for ty::Predicate<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Option<WherePredicate> {
|
||||
let bound_predicate = self.kind();
|
||||
match bound_predicate.skip_binder() {
|
||||
ty::PredicateKind::Trait(pred) => bound_predicate.rebind(pred).clean(cx),
|
||||
@ -300,8 +300,8 @@ impl<'a> Clean<Option<WherePredicate>> for ty::Predicate<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Clean<Option<WherePredicate>> for ty::PolyTraitPredicate<'a> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Option<WherePredicate> {
|
||||
impl<'tcx> Clean<'tcx, Option<WherePredicate>> for ty::PolyTraitPredicate<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Option<WherePredicate> {
|
||||
// `T: ~const Destruct` is hidden because `T: Destruct` is a no-op.
|
||||
if self.skip_binder().constness == ty::BoundConstness::ConstIfConst
|
||||
&& Some(self.skip_binder().def_id()) == cx.tcx.lang_items().destruct_trait()
|
||||
@ -318,10 +318,10 @@ impl<'a> Clean<Option<WherePredicate>> for ty::PolyTraitPredicate<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Option<WherePredicate>>
|
||||
impl<'tcx> Clean<'tcx, Option<WherePredicate>>
|
||||
for ty::OutlivesPredicate<ty::Region<'tcx>, ty::Region<'tcx>>
|
||||
{
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Option<WherePredicate> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Option<WherePredicate> {
|
||||
let ty::OutlivesPredicate(a, b) = self;
|
||||
|
||||
if a.is_empty() && b.is_empty() {
|
||||
@ -335,8 +335,10 @@ impl<'tcx> Clean<Option<WherePredicate>>
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Option<WherePredicate>> for ty::OutlivesPredicate<Ty<'tcx>, ty::Region<'tcx>> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Option<WherePredicate> {
|
||||
impl<'tcx> Clean<'tcx, Option<WherePredicate>>
|
||||
for ty::OutlivesPredicate<Ty<'tcx>, ty::Region<'tcx>>
|
||||
{
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Option<WherePredicate> {
|
||||
let ty::OutlivesPredicate(ty, lt) = self;
|
||||
|
||||
if lt.is_empty() {
|
||||
@ -351,8 +353,8 @@ impl<'tcx> Clean<Option<WherePredicate>> for ty::OutlivesPredicate<Ty<'tcx>, ty:
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Term> for ty::Term<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Term {
|
||||
impl<'tcx> Clean<'tcx, Term> for ty::Term<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Term {
|
||||
match self {
|
||||
ty::Term::Ty(ty) => Term::Type(ty.clean(cx)),
|
||||
ty::Term::Const(c) => Term::Constant(c.clean(cx)),
|
||||
@ -360,8 +362,8 @@ impl<'tcx> Clean<Term> for ty::Term<'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Term> for hir::Term<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Term {
|
||||
impl<'tcx> Clean<'tcx, Term> for hir::Term<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Term {
|
||||
match self {
|
||||
hir::Term::Ty(ty) => Term::Type(ty.clean(cx)),
|
||||
hir::Term::Const(c) => {
|
||||
@ -372,8 +374,8 @@ impl<'tcx> Clean<Term> for hir::Term<'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<WherePredicate> for ty::ProjectionPredicate<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> WherePredicate {
|
||||
impl<'tcx> Clean<'tcx, WherePredicate> for ty::ProjectionPredicate<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> WherePredicate {
|
||||
let ty::ProjectionPredicate { projection_ty, term } = self;
|
||||
WherePredicate::EqPredicate { lhs: projection_ty.clean(cx), rhs: term.clean(cx) }
|
||||
}
|
||||
@ -381,7 +383,7 @@ impl<'tcx> Clean<WherePredicate> for ty::ProjectionPredicate<'tcx> {
|
||||
|
||||
fn clean_projection<'tcx>(
|
||||
ty: ty::ProjectionTy<'tcx>,
|
||||
cx: &mut DocContext<'_>,
|
||||
cx: &mut DocContext<'tcx>,
|
||||
def_id: Option<DefId>,
|
||||
) -> Type {
|
||||
let lifted = ty.lift_to_tcx(cx.tcx).unwrap();
|
||||
@ -401,8 +403,8 @@ fn clean_projection<'tcx>(
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Type> for ty::ProjectionTy<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Type {
|
||||
impl<'tcx> Clean<'tcx, Type> for ty::ProjectionTy<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Type {
|
||||
clean_projection(*self, cx, None)
|
||||
}
|
||||
}
|
||||
@ -414,7 +416,10 @@ fn compute_should_show_cast(self_def_id: Option<DefId>, trait_: &Path, self_type
|
||||
.map_or(!self_type.is_self_type(), |(id, trait_)| id != trait_)
|
||||
}
|
||||
|
||||
fn projection_to_path_segment(ty: ty::ProjectionTy<'_>, cx: &mut DocContext<'_>) -> PathSegment {
|
||||
fn projection_to_path_segment<'tcx>(
|
||||
ty: ty::ProjectionTy<'tcx>,
|
||||
cx: &mut DocContext<'tcx>,
|
||||
) -> PathSegment {
|
||||
let item = cx.tcx.associated_item(ty.item_def_id);
|
||||
let generics = cx.tcx.generics_of(ty.item_def_id);
|
||||
PathSegment {
|
||||
@ -426,8 +431,8 @@ fn projection_to_path_segment(ty: ty::ProjectionTy<'_>, cx: &mut DocContext<'_>)
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<GenericParamDef> for ty::GenericParamDef {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> GenericParamDef {
|
||||
impl<'tcx> Clean<'tcx, GenericParamDef> for ty::GenericParamDef {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> GenericParamDef {
|
||||
let (name, kind) = match self.kind {
|
||||
ty::GenericParamDefKind::Lifetime => {
|
||||
(self.name, GenericParamDefKind::Lifetime { outlives: vec![] })
|
||||
@ -465,10 +470,10 @@ impl Clean<GenericParamDef> for ty::GenericParamDef {
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_generic_param(
|
||||
cx: &mut DocContext<'_>,
|
||||
generics: Option<&hir::Generics<'_>>,
|
||||
param: &hir::GenericParam<'_>,
|
||||
fn clean_generic_param<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
generics: Option<&hir::Generics<'tcx>>,
|
||||
param: &hir::GenericParam<'tcx>,
|
||||
) -> GenericParamDef {
|
||||
let (name, kind) = match param.kind {
|
||||
hir::GenericParamKind::Lifetime { .. } => {
|
||||
@ -536,8 +541,8 @@ fn clean_generic_param(
|
||||
GenericParamDef { name, kind }
|
||||
}
|
||||
|
||||
impl Clean<Generics> for hir::Generics<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Generics {
|
||||
impl<'tcx> Clean<'tcx, Generics> for hir::Generics<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Generics {
|
||||
// Synthetic type-parameters are inserted after normal ones.
|
||||
// In order for normal parameters to be able to refer to synthetic ones,
|
||||
// scans them first.
|
||||
@ -618,10 +623,10 @@ impl Clean<Generics> for hir::Generics<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_ty_generics(
|
||||
cx: &mut DocContext<'_>,
|
||||
fn clean_ty_generics<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
gens: &ty::Generics,
|
||||
preds: ty::GenericPredicates<'_>,
|
||||
preds: ty::GenericPredicates<'tcx>,
|
||||
) -> Generics {
|
||||
// Don't populate `cx.impl_trait_bounds` before `clean`ning `where` clauses,
|
||||
// since `Clean for ty::Predicate` would consume them.
|
||||
@ -784,13 +789,13 @@ fn clean_ty_generics(
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_fn_or_proc_macro(
|
||||
item: &hir::Item<'_>,
|
||||
sig: &hir::FnSig<'_>,
|
||||
generics: &hir::Generics<'_>,
|
||||
fn clean_fn_or_proc_macro<'tcx>(
|
||||
item: &hir::Item<'tcx>,
|
||||
sig: &hir::FnSig<'tcx>,
|
||||
generics: &hir::Generics<'tcx>,
|
||||
body_id: hir::BodyId,
|
||||
name: &mut Symbol,
|
||||
cx: &mut DocContext<'_>,
|
||||
cx: &mut DocContext<'tcx>,
|
||||
) -> ItemKind {
|
||||
let attrs = cx.tcx.hir().attrs(item.hir_id());
|
||||
let macro_kind = attrs.iter().find_map(|a| {
|
||||
@ -868,10 +873,10 @@ fn clean_fn_decl_legacy_const_generics(func: &mut Function, attrs: &[ast::Attrib
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_function(
|
||||
cx: &mut DocContext<'_>,
|
||||
sig: &hir::FnSig<'_>,
|
||||
generics: &hir::Generics<'_>,
|
||||
fn clean_function<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
sig: &hir::FnSig<'tcx>,
|
||||
generics: &hir::Generics<'tcx>,
|
||||
body_id: hir::BodyId,
|
||||
) -> Function {
|
||||
let (generics, decl) = enter_impl_trait(cx, |cx| {
|
||||
@ -884,9 +889,9 @@ fn clean_function(
|
||||
Function { decl, generics }
|
||||
}
|
||||
|
||||
fn clean_args_from_types_and_names(
|
||||
cx: &mut DocContext<'_>,
|
||||
types: &[hir::Ty<'_>],
|
||||
fn clean_args_from_types_and_names<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
types: &[hir::Ty<'tcx>],
|
||||
names: &[Ident],
|
||||
) -> Arguments {
|
||||
Arguments {
|
||||
@ -904,9 +909,9 @@ fn clean_args_from_types_and_names(
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_args_from_types_and_body_id(
|
||||
cx: &mut DocContext<'_>,
|
||||
types: &[hir::Ty<'_>],
|
||||
fn clean_args_from_types_and_body_id<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
types: &[hir::Ty<'tcx>],
|
||||
body_id: hir::BodyId,
|
||||
) -> Arguments {
|
||||
let body = cx.tcx.hir().body(body_id);
|
||||
@ -924,18 +929,18 @@ fn clean_args_from_types_and_body_id(
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_fn_decl_with_args(
|
||||
cx: &mut DocContext<'_>,
|
||||
decl: &hir::FnDecl<'_>,
|
||||
fn clean_fn_decl_with_args<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
decl: &hir::FnDecl<'tcx>,
|
||||
args: Arguments,
|
||||
) -> FnDecl {
|
||||
FnDecl { inputs: args, output: decl.output.clean(cx), c_variadic: decl.c_variadic }
|
||||
}
|
||||
|
||||
fn clean_fn_decl_from_did_and_sig(
|
||||
cx: &mut DocContext<'_>,
|
||||
fn clean_fn_decl_from_did_and_sig<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
did: Option<DefId>,
|
||||
sig: ty::PolyFnSig<'_>,
|
||||
sig: ty::PolyFnSig<'tcx>,
|
||||
) -> FnDecl {
|
||||
let mut names = did.map_or(&[] as &[_], |did| cx.tcx.fn_arg_names(did)).iter();
|
||||
|
||||
@ -964,8 +969,8 @@ fn clean_fn_decl_from_did_and_sig(
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<FnRetTy> for hir::FnRetTy<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> FnRetTy {
|
||||
impl<'tcx> Clean<'tcx, FnRetTy> for hir::FnRetTy<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> FnRetTy {
|
||||
match *self {
|
||||
Self::Return(ref typ) => Return(typ.clean(cx)),
|
||||
Self::DefaultReturn(..) => DefaultReturn,
|
||||
@ -973,8 +978,8 @@ impl Clean<FnRetTy> for hir::FnRetTy<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<bool> for hir::IsAuto {
|
||||
fn clean(&self, _: &mut DocContext<'_>) -> bool {
|
||||
impl<'tcx> Clean<'tcx, bool> for hir::IsAuto {
|
||||
fn clean(&self, _: &mut DocContext<'tcx>) -> bool {
|
||||
match *self {
|
||||
hir::IsAuto::Yes => true,
|
||||
hir::IsAuto::No => false,
|
||||
@ -982,16 +987,16 @@ impl Clean<bool> for hir::IsAuto {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Path> for hir::TraitRef<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Path {
|
||||
impl<'tcx> Clean<'tcx, Path> for hir::TraitRef<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Path {
|
||||
let path = self.path.clean(cx);
|
||||
register_res(cx, path.res);
|
||||
path
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<PolyTrait> for hir::PolyTraitRef<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> PolyTrait {
|
||||
impl<'tcx> Clean<'tcx, PolyTrait> for hir::PolyTraitRef<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> PolyTrait {
|
||||
PolyTrait {
|
||||
trait_: self.trait_ref.clean(cx),
|
||||
generic_params: self
|
||||
@ -1003,8 +1008,8 @@ impl Clean<PolyTrait> for hir::PolyTraitRef<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Item> for hir::TraitItem<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for hir::TraitItem<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
let local_did = self.def_id.to_def_id();
|
||||
cx.with_param_env(local_did, |cx| {
|
||||
let inner = match self.kind {
|
||||
@ -1050,8 +1055,8 @@ impl Clean<Item> for hir::TraitItem<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Item> for hir::ImplItem<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for hir::ImplItem<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
let local_did = self.def_id.to_def_id();
|
||||
cx.with_param_env(local_did, |cx| {
|
||||
let inner = match self.kind {
|
||||
@ -1091,8 +1096,8 @@ impl Clean<Item> for hir::ImplItem<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Item> for ty::AssocItem {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for ty::AssocItem {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
let tcx = cx.tcx;
|
||||
let kind = match self.kind {
|
||||
ty::AssocKind::Const => {
|
||||
@ -1282,7 +1287,7 @@ impl Clean<Item> for ty::AssocItem {
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_qpath(hir_ty: &hir::Ty<'_>, cx: &mut DocContext<'_>) -> Type {
|
||||
fn clean_qpath<'tcx>(hir_ty: &hir::Ty<'tcx>, cx: &mut DocContext<'tcx>) -> Type {
|
||||
let hir::Ty { hir_id: _, span, ref kind } = *hir_ty;
|
||||
let hir::TyKind::Path(qpath) = kind else { unreachable!() };
|
||||
|
||||
@ -1352,7 +1357,10 @@ fn clean_qpath(hir_ty: &hir::Ty<'_>, cx: &mut DocContext<'_>) -> Type {
|
||||
}
|
||||
}
|
||||
|
||||
fn maybe_expand_private_type_alias(cx: &mut DocContext<'_>, path: &hir::Path<'_>) -> Option<Type> {
|
||||
fn maybe_expand_private_type_alias<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
path: &hir::Path<'tcx>,
|
||||
) -> Option<Type> {
|
||||
let Res::Def(DefKind::TyAlias, def_id) = path.res else { return None };
|
||||
// Substitute private type aliases
|
||||
let def_id = def_id.as_local()?;
|
||||
@ -1435,8 +1443,8 @@ fn maybe_expand_private_type_alias(cx: &mut DocContext<'_>, path: &hir::Path<'_>
|
||||
Some(cx.enter_alias(substs, |cx| ty.clean(cx)))
|
||||
}
|
||||
|
||||
impl Clean<Type> for hir::Ty<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Type {
|
||||
impl<'tcx> Clean<'tcx, Type> for hir::Ty<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Type {
|
||||
use rustc_hir::*;
|
||||
|
||||
match self.kind {
|
||||
@ -1530,7 +1538,7 @@ fn normalize<'tcx>(cx: &mut DocContext<'tcx>, ty: Ty<'_>) -> Option<Ty<'tcx>> {
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_ty<'tcx>(this: Ty<'tcx>, cx: &mut DocContext<'_>, def_id: Option<DefId>) -> Type {
|
||||
fn clean_ty<'tcx>(this: Ty<'tcx>, cx: &mut DocContext<'tcx>, def_id: Option<DefId>) -> Type {
|
||||
trace!("cleaning type: {:?}", this);
|
||||
let ty = normalize(cx, this).unwrap_or(this);
|
||||
match *ty.kind() {
|
||||
@ -1715,14 +1723,14 @@ fn clean_ty<'tcx>(this: Ty<'tcx>, cx: &mut DocContext<'_>, def_id: Option<DefId>
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Type> for Ty<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Type {
|
||||
impl<'tcx> Clean<'tcx, Type> for Ty<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Type {
|
||||
clean_ty(*self, cx, None)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Constant> for ty::Const<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Constant {
|
||||
impl<'tcx> Clean<'tcx, Constant> for ty::Const<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Constant {
|
||||
// FIXME: instead of storing the stringified expression, store `self` directly instead.
|
||||
Constant {
|
||||
type_: self.ty().clean(cx),
|
||||
@ -1731,15 +1739,15 @@ impl<'tcx> Clean<Constant> for ty::Const<'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Item> for hir::FieldDef<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for hir::FieldDef<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
let def_id = cx.tcx.hir().local_def_id(self.hir_id).to_def_id();
|
||||
clean_field(def_id, self.ident.name, self.ty.clean(cx), cx)
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Item> for ty::FieldDef {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for ty::FieldDef {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
clean_field(self.did, self.name, cx.tcx.type_of(self.did).clean(cx), cx)
|
||||
}
|
||||
}
|
||||
@ -1765,7 +1773,7 @@ fn is_field_vis_inherited(tcx: TyCtxt<'_>, def_id: DefId) -> bool {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Visibility> for ty::Visibility {
|
||||
impl<'tcx> Clean<'tcx, Visibility> for ty::Visibility {
|
||||
fn clean(&self, _cx: &mut DocContext<'_>) -> Visibility {
|
||||
match *self {
|
||||
ty::Visibility::Public => Visibility::Public,
|
||||
@ -1779,8 +1787,8 @@ impl Clean<Visibility> for ty::Visibility {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<VariantStruct> for rustc_hir::VariantData<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> VariantStruct {
|
||||
impl<'tcx> Clean<'tcx, VariantStruct> for rustc_hir::VariantData<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> VariantStruct {
|
||||
VariantStruct {
|
||||
struct_type: CtorKind::from_hir(self),
|
||||
fields: self.fields().iter().map(|x| x.clean(cx)).collect(),
|
||||
@ -1788,14 +1796,14 @@ impl Clean<VariantStruct> for rustc_hir::VariantData<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Vec<Item>> for hir::VariantData<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Vec<Item> {
|
||||
impl<'tcx> Clean<'tcx, Vec<Item>> for hir::VariantData<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Vec<Item> {
|
||||
self.fields().iter().map(|x| x.clean(cx)).collect()
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Item> for ty::VariantDef {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for ty::VariantDef {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
let kind = match self.ctor_kind {
|
||||
CtorKind::Const => Variant::CLike,
|
||||
CtorKind::Fn => {
|
||||
@ -1813,8 +1821,8 @@ impl Clean<Item> for ty::VariantDef {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Variant> for hir::VariantData<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Variant {
|
||||
impl<'tcx> Clean<'tcx, Variant> for hir::VariantData<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Variant {
|
||||
match self {
|
||||
hir::VariantData::Struct(..) => Variant::Struct(self.clean(cx)),
|
||||
hir::VariantData::Tuple(..) => Variant::Tuple(self.clean(cx)),
|
||||
@ -1823,14 +1831,14 @@ impl Clean<Variant> for hir::VariantData<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<Path> for hir::Path<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Path {
|
||||
impl<'tcx> Clean<'tcx, Path> for hir::Path<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Path {
|
||||
Path { res: self.res, segments: self.segments.iter().map(|x| x.clean(cx)).collect() }
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<GenericArgs> for hir::GenericArgs<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> GenericArgs {
|
||||
impl<'tcx> Clean<'tcx, GenericArgs> for hir::GenericArgs<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> GenericArgs {
|
||||
if self.parenthesized {
|
||||
let output = self.bindings[0].ty().clean(cx);
|
||||
let output =
|
||||
@ -1858,14 +1866,14 @@ impl Clean<GenericArgs> for hir::GenericArgs<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<PathSegment> for hir::PathSegment<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> PathSegment {
|
||||
impl<'tcx> Clean<'tcx, PathSegment> for hir::PathSegment<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> PathSegment {
|
||||
PathSegment { name: self.ident.name, args: self.args().clean(cx) }
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<BareFunctionDecl> for hir::BareFnTy<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> BareFunctionDecl {
|
||||
impl<'tcx> Clean<'tcx, BareFunctionDecl> for hir::BareFnTy<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> BareFunctionDecl {
|
||||
let (generic_params, decl) = enter_impl_trait(cx, |cx| {
|
||||
// NOTE: generics must be cleaned before args
|
||||
let generic_params =
|
||||
@ -1878,9 +1886,9 @@ impl Clean<BareFunctionDecl> for hir::BareFnTy<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_maybe_renamed_item(
|
||||
cx: &mut DocContext<'_>,
|
||||
item: &hir::Item<'_>,
|
||||
fn clean_maybe_renamed_item<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
item: &hir::Item<'tcx>,
|
||||
renamed: Option<Symbol>,
|
||||
) -> Vec<Item> {
|
||||
use hir::ItemKind;
|
||||
@ -1961,8 +1969,8 @@ fn clean_maybe_renamed_item(
|
||||
})
|
||||
}
|
||||
|
||||
impl Clean<Item> for hir::Variant<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> Item {
|
||||
impl<'tcx> Clean<'tcx, Item> for hir::Variant<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> Item {
|
||||
let kind = VariantItem(self.data.clean(cx));
|
||||
let what_rustc_thinks =
|
||||
Item::from_hir_id_and_parts(self.id, Some(self.ident.name), kind, cx);
|
||||
@ -1971,7 +1979,11 @@ impl Clean<Item> for hir::Variant<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
fn clean_impl(impl_: &hir::Impl<'_>, hir_id: hir::HirId, cx: &mut DocContext<'_>) -> Vec<Item> {
|
||||
fn clean_impl<'tcx>(
|
||||
impl_: &hir::Impl<'tcx>,
|
||||
hir_id: hir::HirId,
|
||||
cx: &mut DocContext<'tcx>,
|
||||
) -> Vec<Item> {
|
||||
let tcx = cx.tcx;
|
||||
let mut ret = Vec::new();
|
||||
let trait_ = impl_.of_trait.as_ref().map(|t| t.clean(cx));
|
||||
@ -2009,11 +2021,11 @@ fn clean_impl(impl_: &hir::Impl<'_>, hir_id: hir::HirId, cx: &mut DocContext<'_>
|
||||
ret
|
||||
}
|
||||
|
||||
fn clean_extern_crate(
|
||||
krate: &hir::Item<'_>,
|
||||
fn clean_extern_crate<'tcx>(
|
||||
krate: &hir::Item<'tcx>,
|
||||
name: Symbol,
|
||||
orig_name: Option<Symbol>,
|
||||
cx: &mut DocContext<'_>,
|
||||
cx: &mut DocContext<'tcx>,
|
||||
) -> Vec<Item> {
|
||||
// this is the ID of the `extern crate` statement
|
||||
let cnum = cx.tcx.extern_mod_stmt_cnum(krate.def_id).unwrap_or(LOCAL_CRATE);
|
||||
@ -2059,12 +2071,12 @@ fn clean_extern_crate(
|
||||
}]
|
||||
}
|
||||
|
||||
fn clean_use_statement(
|
||||
import: &hir::Item<'_>,
|
||||
fn clean_use_statement<'tcx>(
|
||||
import: &hir::Item<'tcx>,
|
||||
name: Symbol,
|
||||
path: &hir::Path<'_>,
|
||||
path: &hir::Path<'tcx>,
|
||||
kind: hir::UseKind,
|
||||
cx: &mut DocContext<'_>,
|
||||
cx: &mut DocContext<'tcx>,
|
||||
) -> Vec<Item> {
|
||||
// We need this comparison because some imports (for std types for example)
|
||||
// are "inserted" as well but directly by the compiler and they should not be
|
||||
@ -2172,9 +2184,9 @@ fn clean_use_statement(
|
||||
vec![Item::from_def_id_and_parts(import.def_id.to_def_id(), None, ImportItem(inner), cx)]
|
||||
}
|
||||
|
||||
fn clean_maybe_renamed_foreign_item(
|
||||
cx: &mut DocContext<'_>,
|
||||
item: &hir::ForeignItem<'_>,
|
||||
fn clean_maybe_renamed_foreign_item<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
item: &hir::ForeignItem<'tcx>,
|
||||
renamed: Option<Symbol>,
|
||||
) -> Item {
|
||||
let def_id = item.def_id.to_def_id();
|
||||
@ -2205,8 +2217,8 @@ fn clean_maybe_renamed_foreign_item(
|
||||
})
|
||||
}
|
||||
|
||||
impl Clean<TypeBinding> for hir::TypeBinding<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> TypeBinding {
|
||||
impl<'tcx> Clean<'tcx, TypeBinding> for hir::TypeBinding<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> TypeBinding {
|
||||
TypeBinding {
|
||||
assoc: PathSegment { name: self.ident.name, args: self.gen_args.clean(cx) },
|
||||
kind: self.kind.clean(cx),
|
||||
@ -2214,8 +2226,8 @@ impl Clean<TypeBinding> for hir::TypeBinding<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Clean<TypeBindingKind> for hir::TypeBindingKind<'_> {
|
||||
fn clean(&self, cx: &mut DocContext<'_>) -> TypeBindingKind {
|
||||
impl<'tcx> Clean<'tcx, TypeBindingKind> for hir::TypeBindingKind<'tcx> {
|
||||
fn clean(&self, cx: &mut DocContext<'tcx>) -> TypeBindingKind {
|
||||
match *self {
|
||||
hir::TypeBindingKind::Equality { ref term } => {
|
||||
TypeBindingKind::Equality { term: term.clean(cx) }
|
||||
|
@ -75,9 +75,9 @@ pub(crate) fn krate(cx: &mut DocContext<'_>) -> Crate {
|
||||
Crate { module, primitives, external_traits: cx.external_traits.clone() }
|
||||
}
|
||||
|
||||
pub(crate) fn substs_to_args(
|
||||
cx: &mut DocContext<'_>,
|
||||
substs: &[ty::subst::GenericArg<'_>],
|
||||
pub(crate) fn substs_to_args<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
substs: &[ty::subst::GenericArg<'tcx>],
|
||||
mut skip_first: bool,
|
||||
) -> Vec<GenericArg> {
|
||||
let mut ret_val =
|
||||
@ -99,12 +99,12 @@ pub(crate) fn substs_to_args(
|
||||
ret_val
|
||||
}
|
||||
|
||||
fn external_generic_args(
|
||||
cx: &mut DocContext<'_>,
|
||||
fn external_generic_args<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
did: DefId,
|
||||
has_self: bool,
|
||||
bindings: Vec<TypeBinding>,
|
||||
substs: SubstsRef<'_>,
|
||||
substs: SubstsRef<'tcx>,
|
||||
) -> GenericArgs {
|
||||
let args = substs_to_args(cx, &substs, has_self);
|
||||
|
||||
@ -127,12 +127,12 @@ fn external_generic_args(
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) fn external_path(
|
||||
cx: &mut DocContext<'_>,
|
||||
pub(super) fn external_path<'tcx>(
|
||||
cx: &mut DocContext<'tcx>,
|
||||
did: DefId,
|
||||
has_self: bool,
|
||||
bindings: Vec<TypeBinding>,
|
||||
substs: SubstsRef<'_>,
|
||||
substs: SubstsRef<'tcx>,
|
||||
) -> Path {
|
||||
let def_kind = cx.tcx.def_kind(did);
|
||||
let name = cx.tcx.item_name(did);
|
||||
@ -439,9 +439,9 @@ pub(crate) fn resolve_use_source(cx: &mut DocContext<'_>, path: Path) -> ImportS
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn enter_impl_trait<F, R>(cx: &mut DocContext<'_>, f: F) -> R
|
||||
pub(crate) fn enter_impl_trait<'tcx, F, R>(cx: &mut DocContext<'tcx>, f: F) -> R
|
||||
where
|
||||
F: FnOnce(&mut DocContext<'_>) -> R,
|
||||
F: FnOnce(&mut DocContext<'tcx>) -> R,
|
||||
{
|
||||
let old_bounds = mem::take(&mut cx.impl_trait_bounds);
|
||||
let r = f(cx);
|
||||
|
Loading…
x
Reference in New Issue
Block a user