rustdoc: fix type search when more than one `where` clause applies

This commit is contained in:
Michael Howell 2023-03-07 11:21:12 -07:00
parent a6446c53fe
commit 44813e038c
4 changed files with 33 additions and 8 deletions

View File

@ -484,7 +484,7 @@ fn add_generics_and_bounds_as_types<'tcx, 'a>(
// for its bounds. // for its bounds.
if let Type::Generic(arg_s) = *arg { if let Type::Generic(arg_s) = *arg {
// First we check if the bounds are in a `where` predicate... // First we check if the bounds are in a `where` predicate...
if let Some(where_pred) = generics.where_predicates.iter().find(|g| match g { for where_pred in generics.where_predicates.iter().filter(|g| match g {
WherePredicate::BoundPredicate { ty: Type::Generic(ty_s), .. } => *ty_s == arg_s, WherePredicate::BoundPredicate { ty: Type::Generic(ty_s), .. } => *ty_s == arg_s,
_ => false, _ => false,
}) { }) {

View File

@ -1,7 +1,18 @@
const QUERY = 'option, fnonce -> option'; const QUERY = [
'option, fnonce -> option',
'option -> default',
];
const EXPECTED = { const EXPECTED = [
'others': [ {
{ 'path': 'std::option::Option', 'name': 'map' }, 'others': [
], { 'path': 'std::option::Option', 'name': 'map' },
}; ],
},
{
'others': [
{ 'path': 'std::option::Option', 'name': 'unwrap_or_default' },
{ 'path': 'std::option::Option', 'name': 'get_or_insert_default' },
],
},
];

View File

@ -1,4 +1,4 @@
const QUERY = ['trait<nested>', '-> trait<nested>', 't1, t2', '-> shazam']; const QUERY = ['trait<nested>', '-> trait<nested>', 't1, t2', '-> shazam', 'drizzel -> shazam'];
const EXPECTED = [ const EXPECTED = [
{ {
@ -19,6 +19,12 @@ const EXPECTED = [
{ {
'others': [ 'others': [
{ 'path': 'where_clause', 'name': 'bippety' }, { 'path': 'where_clause', 'name': 'bippety' },
{ 'path': 'where_clause::Drizzel', 'name': 'boppety' },
],
},
{
'others': [
{ 'path': 'where_clause::Drizzel', 'name': 'boppety' },
], ],
}, },
]; ];

View File

@ -20,3 +20,11 @@ pub trait Shazam {}
pub fn bippety<X>() -> &'static X where X: Shazam { pub fn bippety<X>() -> &'static X where X: Shazam {
panic!() panic!()
} }
pub struct Drizzel<T>(T);
impl<T> Drizzel<T> {
pub fn boppety(&self) -> &T where T: Shazam {
panic!();
}
}