From 3673676375fcf931840123daad54f703042037c4 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Wed, 4 Oct 2023 10:04:20 -0700 Subject: [PATCH] rustdoc: rebase after changes to bindings --- src/librustdoc/clean/types.rs | 12 +++++--- src/librustdoc/html/render/search_index.rs | 35 ++++++++++++---------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 8fcc0d0d4b039..ded256fd75c52 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -1651,16 +1651,16 @@ impl Type { } } - pub(crate) fn generics(&self) -> Option> { + pub(crate) fn generic_args(&self) -> Option<&GenericArgs> { match self { - Type::Path { path, .. } => path.generics(), + Type::Path { path, .. } => path.generic_args(), _ => None, } } - pub(crate) fn bindings(&self) -> Option<&[TypeBinding]> { + pub(crate) fn generics(&self) -> Option> { match self { - Type::Path { path, .. } => path.bindings(), + Type::Path { path, .. } => path.generics(), _ => None, } } @@ -2198,6 +2198,10 @@ impl Path { } } + pub(crate) fn generic_args(&self) -> Option<&GenericArgs> { + self.segments.last().map(|seg| &seg.args) + } + pub(crate) fn generics(&self) -> Option> { self.segments.last().and_then(|seg| { if let GenericArgs::AngleBracketed { ref args, .. } = seg.args { diff --git a/src/librustdoc/html/render/search_index.rs b/src/librustdoc/html/render/search_index.rs index 4b682eec4c9f2..b3ae720fcf609 100644 --- a/src/librustdoc/html/render/search_index.rs +++ b/src/librustdoc/html/render/search_index.rs @@ -805,25 +805,15 @@ fn simplify_fn_type<'tcx, 'a>( // we will look for them but not for `T`). let mut ty_generics = Vec::new(); let mut ty_bindings = Vec::new(); - for binding in arg.bindings().unwrap_or_default() { - simplify_fn_binding( - self_, - generics, - binding, - tcx, - recurse + 1, - &mut ty_bindings, - rgen, - is_return, - cache, - ); - } - if let Some(arg_generics) = arg.generics() { - for gen in arg_generics.iter() { + if let Some(arg_generics) = arg.generic_args() { + for ty in arg_generics.into_iter().filter_map(|gen| match gen { + clean::GenericArg::Type(ty) => Some(ty), + _ => None, + }) { simplify_fn_type( self_, generics, - gen, + &ty, tcx, recurse + 1, &mut ty_generics, @@ -832,6 +822,19 @@ fn simplify_fn_type<'tcx, 'a>( cache, ); } + for binding in arg_generics.bindings() { + simplify_fn_binding( + self_, + generics, + &binding, + tcx, + recurse + 1, + &mut ty_bindings, + rgen, + is_return, + cache, + ); + } } // Every trait associated type on self gets assigned to a type parameter index // this same one is used later for any appearances of these types