Rollup merge of #46786 - GuillaumeGomez:fix-sized-rendering, r=QuietMisdreavus
Fix ?Sized where bound not being displayed at the correct place Fixes #46726. r? @QuietMisdreavus
This commit is contained in:
commit
723190752b
@ -448,8 +448,7 @@ fn build_static(cx: &DocContext, did: DefId, mutable: bool) -> clean::Static {
|
|||||||
///
|
///
|
||||||
/// The inverse of this filtering logic can be found in the `Clean`
|
/// The inverse of this filtering logic can be found in the `Clean`
|
||||||
/// implementation for `AssociatedType`
|
/// implementation for `AssociatedType`
|
||||||
fn filter_non_trait_generics(trait_did: DefId, mut g: clean::Generics)
|
fn filter_non_trait_generics(trait_did: DefId, mut g: clean::Generics) -> clean::Generics {
|
||||||
-> clean::Generics {
|
|
||||||
for pred in &mut g.where_predicates {
|
for pred in &mut g.where_predicates {
|
||||||
match *pred {
|
match *pred {
|
||||||
clean::WherePredicate::BoundPredicate {
|
clean::WherePredicate::BoundPredicate {
|
||||||
|
@ -1190,17 +1190,37 @@ impl<'tcx> Clean<Type> for ty::ProjectionTy<'tcx> {
|
|||||||
pub struct Generics {
|
pub struct Generics {
|
||||||
pub lifetimes: Vec<Lifetime>,
|
pub lifetimes: Vec<Lifetime>,
|
||||||
pub type_params: Vec<TyParam>,
|
pub type_params: Vec<TyParam>,
|
||||||
pub where_predicates: Vec<WherePredicate>
|
pub where_predicates: Vec<WherePredicate>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Clean<Generics> for hir::Generics {
|
impl Clean<Generics> for hir::Generics {
|
||||||
fn clean(&self, cx: &DocContext) -> Generics {
|
fn clean(&self, cx: &DocContext) -> Generics {
|
||||||
Generics {
|
let mut g = Generics {
|
||||||
lifetimes: self.lifetimes.clean(cx),
|
lifetimes: self.lifetimes.clean(cx),
|
||||||
type_params: self.ty_params.clean(cx),
|
type_params: self.ty_params.clean(cx),
|
||||||
where_predicates: self.where_clause.predicates.clean(cx)
|
where_predicates: self.where_clause.predicates.clean(cx)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Some duplicates are generated for ?Sized bounds between type params and where
|
||||||
|
// predicates. The point in here is to move the bounds definitions from type params
|
||||||
|
// to where predicates when such cases occur.
|
||||||
|
for where_pred in &mut g.where_predicates {
|
||||||
|
match *where_pred {
|
||||||
|
WherePredicate::BoundPredicate { ty: Generic(ref name), ref mut bounds } => {
|
||||||
|
if bounds.is_empty() {
|
||||||
|
for type_params in &mut g.type_params {
|
||||||
|
if &type_params.name == name {
|
||||||
|
mem::swap(bounds, &mut type_params.bounds);
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => continue,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx> Clean<Generics> for (&'a ty::Generics,
|
impl<'a, 'tcx> Clean<Generics> for (&'a ty::Generics,
|
||||||
|
@ -38,6 +38,7 @@ pub fn where_clauses(cx: &DocContext, clauses: Vec<WP>) -> Vec<WP> {
|
|||||||
let mut lifetimes = Vec::new();
|
let mut lifetimes = Vec::new();
|
||||||
let mut equalities = Vec::new();
|
let mut equalities = Vec::new();
|
||||||
let mut tybounds = Vec::new();
|
let mut tybounds = Vec::new();
|
||||||
|
|
||||||
for clause in clauses {
|
for clause in clauses {
|
||||||
match clause {
|
match clause {
|
||||||
WP::BoundPredicate { ty, bounds } => {
|
WP::BoundPredicate { ty, bounds } => {
|
||||||
|
16
src/test/rustdoc/where-sized.rs
Normal file
16
src/test/rustdoc/where-sized.rs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
#![crate_name = "foo"]
|
||||||
|
|
||||||
|
// @has foo/fn.foo.html
|
||||||
|
// @has - '//*[@class="rust fn"]' 'pub fn foo<X, Y: ?Sized>(_: &X)'
|
||||||
|
// @has - '//*[@class="rust fn"]' 'where X: ?Sized,'
|
||||||
|
pub fn foo<X, Y: ?Sized>(_: &X) where X: ?Sized {}
|
Loading…
Reference in New Issue
Block a user