mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Rollup merge of #108875 - notriddle:notriddle/return-trait, r=GuillaumeGomez
rustdoc: fix type search for `Option` combinators
This commit is contained in:
commit
aa881f16ec
@ -486,7 +486,7 @@ fn add_generics_and_bounds_as_types<'tcx, 'a>(
|
||||
}
|
||||
|
||||
// First, check if it's "Self".
|
||||
let arg = if let Some(self_) = self_ {
|
||||
let mut arg = if let Some(self_) = self_ {
|
||||
match &*arg {
|
||||
Type::BorrowedRef { type_, .. } if type_.is_self_type() => self_,
|
||||
type_ if type_.is_self_type() => self_,
|
||||
@ -496,11 +496,16 @@ fn add_generics_and_bounds_as_types<'tcx, 'a>(
|
||||
arg
|
||||
};
|
||||
|
||||
// strip references from the argument type
|
||||
while let Type::BorrowedRef { type_, .. } = &*arg {
|
||||
arg = &*type_;
|
||||
}
|
||||
|
||||
// If this argument is a type parameter and not a trait bound or a type, we need to look
|
||||
// for its bounds.
|
||||
if let Type::Generic(arg_s) = *arg {
|
||||
// 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,
|
||||
_ => false,
|
||||
}) {
|
||||
|
@ -1,7 +1,18 @@
|
||||
const QUERY = 'option, fnonce -> option';
|
||||
const QUERY = [
|
||||
'option, fnonce -> option',
|
||||
'option -> default',
|
||||
];
|
||||
|
||||
const EXPECTED = {
|
||||
'others': [
|
||||
{ 'path': 'std::option::Option', 'name': 'map' },
|
||||
],
|
||||
};
|
||||
const EXPECTED = [
|
||||
{
|
||||
'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' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
@ -1,4 +1,4 @@
|
||||
const QUERY = ['trait<nested>', '-> trait<nested>', 't1, t2'];
|
||||
const QUERY = ['trait<nested>', '-> trait<nested>', 't1, t2', '-> shazam', 'drizzel -> shazam'];
|
||||
|
||||
const EXPECTED = [
|
||||
{
|
||||
@ -16,4 +16,15 @@ const EXPECTED = [
|
||||
{ 'path': 'where_clause', 'name': 'presto' },
|
||||
],
|
||||
},
|
||||
{
|
||||
'others': [
|
||||
{ 'path': 'where_clause', 'name': 'bippety' },
|
||||
{ 'path': 'where_clause::Drizzel', 'name': 'boppety' },
|
||||
],
|
||||
},
|
||||
{
|
||||
'others': [
|
||||
{ 'path': 'where_clause::Drizzel', 'name': 'boppety' },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
@ -14,3 +14,17 @@ pub trait T2<'a, T> {
|
||||
}
|
||||
|
||||
pub fn presto<A, B>(_: A, _: B) where A: T1, B: for <'b> T2<'b, Nested> {}
|
||||
|
||||
pub trait Shazam {}
|
||||
|
||||
pub fn bippety<X>() -> &'static X where X: Shazam {
|
||||
panic!()
|
||||
}
|
||||
|
||||
pub struct Drizzel<T>(T);
|
||||
|
||||
impl<T> Drizzel<T> {
|
||||
pub fn boppety(&self) -> &T where T: Shazam {
|
||||
panic!();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user