about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <jtitor@2k36.org>2022-05-11 13:16:31 +0900
committerGitHub <noreply@github.com>2022-05-11 13:16:31 +0900
commited9faeeddaa17cf46255ddc1875958426407daa9 (patch)
treeab6963a67f89e3ec07c8659a4784984a1ccff246
parent81c0a2d96c42bd3b21111ad7a99026949f4e9a4c (diff)
parent9dc5ac8c4bbf56bd1cae1bcb4f8af245b4b2d67e (diff)
downloadrust-ed9faeeddaa17cf46255ddc1875958426407daa9.tar.gz
rust-ed9faeeddaa17cf46255ddc1875958426407daa9.zip
Rollup merge of #96887 - notriddle:notriddle/as-raw-fd, r=jsha
rustdoc: correct path to type alias methods

Fixes #83991
-rw-r--r--src/librustdoc/formats/cache.rs9
-rw-r--r--src/test/rustdoc-js-std/asrawfd.js14
-rw-r--r--src/test/rustdoc-js/foreign-type-path.js9
-rw-r--r--src/test/rustdoc-js/foreign-type-path.rs13
4 files changed, 37 insertions, 8 deletions
diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs
index 30190138750..9dc30d8a189 100644
--- a/src/librustdoc/formats/cache.rs
+++ b/src/librustdoc/formats/cache.rs
@@ -288,14 +288,7 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> {
                             // for where the type was defined. On the other
                             // hand, `paths` always has the right
                             // information if present.
-                            Some(&(
-                                ref fqp,
-                                ItemType::Trait
-                                | ItemType::Struct
-                                | ItemType::Union
-                                | ItemType::Enum,
-                            )) => Some(&fqp[..fqp.len() - 1]),
-                            Some(..) => Some(&*self.cache.stack),
+                            Some(&(ref fqp, _)) => Some(&fqp[..fqp.len() - 1]),
                             None => None,
                         };
                         ((Some(*last), path), true)
diff --git a/src/test/rustdoc-js-std/asrawfd.js b/src/test/rustdoc-js-std/asrawfd.js
new file mode 100644
index 00000000000..fd228a59099
--- /dev/null
+++ b/src/test/rustdoc-js-std/asrawfd.js
@@ -0,0 +1,14 @@
+// ignore-order
+
+const QUERY = 'RawFd::as_raw_fd';
+
+const EXPECTED = {
+    'others': [
+        // Reproduction test for https://github.com/rust-lang/rust/issues/78724
+        // Validate that type alias methods get the correct path.
+        { 'path': 'std::os::unix::io::AsRawFd', 'name': 'as_raw_fd' },
+        { 'path': 'std::os::wasi::io::AsRawFd', 'name': 'as_raw_fd' },
+        { 'path': 'std::os::linux::process::PidFd', 'name': 'as_raw_fd' },
+        { 'path': 'std::os::unix::io::RawFd', 'name': 'as_raw_fd' },
+    ],
+};
diff --git a/src/test/rustdoc-js/foreign-type-path.js b/src/test/rustdoc-js/foreign-type-path.js
new file mode 100644
index 00000000000..334761badca
--- /dev/null
+++ b/src/test/rustdoc-js/foreign-type-path.js
@@ -0,0 +1,9 @@
+const QUERY = 'MyForeignType::my_method';
+
+const EXPECTED = {
+    'others': [
+        // Test case for https://github.com/rust-lang/rust/pull/96887#pullrequestreview-967154358
+        // Validates that the parent path for a foreign type method is correct.
+        { 'path': 'foreign_type_path::aaaaaaa::MyForeignType', 'name': 'my_method' },
+    ],
+};
diff --git a/src/test/rustdoc-js/foreign-type-path.rs b/src/test/rustdoc-js/foreign-type-path.rs
new file mode 100644
index 00000000000..83400104ea7
--- /dev/null
+++ b/src/test/rustdoc-js/foreign-type-path.rs
@@ -0,0 +1,13 @@
+#![feature(extern_types)]
+
+pub mod aaaaaaa {
+
+    extern {
+        pub type MyForeignType;
+    }
+
+    impl MyForeignType {
+        pub fn my_method() {}
+    }
+
+}