about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2023-03-07 10:06:42 -0700
committerMichael Howell <michael@notriddle.com>2023-03-07 11:20:49 -0700
commita6446c53fe8be6692b07e121b831c3db770ff94a (patch)
tree53a2359aaf4d1b4c7eeb8a3504b3f699179c4ae1
parent0a3b557d528dd7c8a88ceca6f7dc0699b89a3ef4 (diff)
downloadrust-a6446c53fe8be6692b07e121b831c3db770ff94a.tar.gz
rust-a6446c53fe8be6692b07e121b831c3db770ff94a.zip
rustdoc: fix type search index for `fn<T>() -> &T where T: Trait`
-rw-r--r--src/librustdoc/html/render/search_index.rs7
-rw-r--r--tests/rustdoc-js/where-clause.js7
-rw-r--r--tests/rustdoc-js/where-clause.rs6
3 files changed, 18 insertions, 2 deletions
diff --git a/src/librustdoc/html/render/search_index.rs b/src/librustdoc/html/render/search_index.rs
index e22ac6ec19b..483137f4c35 100644
--- a/src/librustdoc/html/render/search_index.rs
+++ b/src/librustdoc/html/render/search_index.rs
@@ -465,7 +465,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_,
@@ -475,6 +475,11 @@ 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 {
diff --git a/tests/rustdoc-js/where-clause.js b/tests/rustdoc-js/where-clause.js
index 6cb42a455a3..4112f08fb0a 100644
--- a/tests/rustdoc-js/where-clause.js
+++ b/tests/rustdoc-js/where-clause.js
@@ -1,4 +1,4 @@
-const QUERY = ['trait<nested>', '-> trait<nested>', 't1, t2'];
+const QUERY = ['trait<nested>', '-> trait<nested>', 't1, t2', '-> shazam'];
 
 const EXPECTED = [
     {
@@ -16,4 +16,9 @@ const EXPECTED = [
             { 'path': 'where_clause', 'name': 'presto' },
         ],
     },
+    {
+        'others': [
+            { 'path': 'where_clause', 'name': 'bippety' },
+        ],
+    },
 ];
diff --git a/tests/rustdoc-js/where-clause.rs b/tests/rustdoc-js/where-clause.rs
index 808561feee2..f8bdc072216 100644
--- a/tests/rustdoc-js/where-clause.rs
+++ b/tests/rustdoc-js/where-clause.rs
@@ -14,3 +14,9 @@ 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!()
+}