Skip to content

Commit

Permalink
rustdoc: handle assoc const equalities in cross-crate impl-Trait-in-a…
Browse files Browse the repository at this point in the history
…rg-pos
  • Loading branch information
fmease committed Jun 25, 2023
1 parent e0ba2d0 commit 247aa06
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 13 deletions.
18 changes: 5 additions & 13 deletions src/librustdoc/clean/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -791,10 +791,10 @@ fn clean_ty_generics<'tcx>(
})
.collect::<ThinVec<GenericParamDef>>();

// param index -> [(trait DefId, associated type name & generics, type, higher-ranked params)]
// param index -> [(trait DefId, associated type name & generics, term, higher-ranked params)]
let mut impl_trait_proj = FxHashMap::<
u32,
Vec<(DefId, PathSegment, ty::Binder<'_, Ty<'_>>, Vec<GenericParamDef>)>,
Vec<(DefId, PathSegment, ty::Binder<'_, ty::Term<'_>>, Vec<GenericParamDef>)>,
>::default();

let where_predicates = preds
Expand Down Expand Up @@ -852,11 +852,10 @@ fn clean_ty_generics<'tcx>(
.as_ref()
.and_then(|(lhs, rhs): &(Type, _)| Some((lhs.projection()?, rhs)))
{
// FIXME(...): Remove this unwrap()
impl_trait_proj.entry(param_idx).or_default().push((
trait_did,
name,
rhs.map_bound(|rhs| rhs.ty().unwrap()),
*rhs,
p.get_bound_params()
.into_iter()
.flatten()
Expand All @@ -879,15 +878,8 @@ fn clean_ty_generics<'tcx>(
let crate::core::ImplTraitParam::ParamIndex(idx) = param else { unreachable!() };
if let Some(proj) = impl_trait_proj.remove(&idx) {
for (trait_did, name, rhs, bound_params) in proj {
let rhs = clean_middle_ty(rhs, cx, None, None);
simplify::merge_bounds(
cx,
&mut bounds,
bound_params,
trait_did,
name,
&Term::Type(rhs),
);
let rhs = clean_middle_term(rhs, cx);
simplify::merge_bounds(cx, &mut bounds, bound_params, trait_did, name, &rhs);
}
}

Expand Down
8 changes: 8 additions & 0 deletions tests/rustdoc/inline_cross/assoc-const-equality.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// aux-crate:assoc_const_equality=assoc-const-equality.rs
// edition:2021

#![crate_name = "user"]

// @has user/fn.accept.html
// @has - '//pre[@class="rust item-decl"]' 'fn accept(_: impl Trait<K = 0>)'
pub use assoc_const_equality::accept;
7 changes: 7 additions & 0 deletions tests/rustdoc/inline_cross/auxiliary/assoc-const-equality.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#![feature(associated_const_equality)]

pub fn accept(_: impl Trait<K = 0>) {}

pub trait Trait {
const K: i32;
}

0 comments on commit 247aa06

Please sign in to comment.