about summary refs log tree commit diff
path: root/src/librustdoc/html/render
diff options
context:
space:
mode:
authorklensy <klensy@users.noreply.github.com>2024-02-04 15:11:16 +0300
committerklensy <klensy@users.noreply.github.com>2024-02-04 16:44:37 +0300
commitcb4e69ad67cd795ffcff18494c41d2f13c26904f (patch)
treeae3f86bb6e6e09aa7523b09c062818ad5c8c103b /src/librustdoc/html/render
parentc401f099795231fca8adf6619d76ccdcfbbfd2f9 (diff)
downloadrust-cb4e69ad67cd795ffcff18494c41d2f13c26904f.tar.gz
rust-cb4e69ad67cd795ffcff18494c41d2f13c26904f.zip
rustdoc: trait.impl, type.impl: sort impls to make it not depend on serialization order
Diffstat (limited to 'src/librustdoc/html/render')
-rw-r--r--src/librustdoc/html/render/write_shared.rs31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs
index 6408e97df50..fbd45b2b48e 100644
--- a/src/librustdoc/html/render/write_shared.rs
+++ b/src/librustdoc/html/render/write_shared.rs
@@ -593,11 +593,17 @@ else if (window.initSearch) window.initSearch(searchIndex);
                 ret
             })
             .collect::<Vec<_>>();
-        let impls = format!(
-            r#""{}":{}"#,
-            krate.name(cx.tcx()),
-            serde_json::to_string(&impls).expect("failed serde conversion"),
-        );
+
+        // FIXME: this fixes only rustdoc part of instability of trait impls
+        // for js files, see #120371
+        // Manually collect to string and sort to make list not depend on order
+        let mut impls = impls
+            .iter()
+            .map(|i| serde_json::to_string(i).expect("failed serde conversion"))
+            .collect::<Vec<_>>();
+        impls.sort();
+
+        let impls = format!(r#""{}":[{}]"#, krate.name(cx.tcx()), impls.join(","));
 
         let mut mydst = dst.clone();
         for part in &aliased_type.target_fqp[..aliased_type.target_fqp.len() - 1] {
@@ -702,11 +708,16 @@ else if (window.initSearch) window.initSearch(searchIndex);
             continue;
         }
 
-        let implementors = format!(
-            r#""{}":{}"#,
-            krate.name(cx.tcx()),
-            serde_json::to_string(&implementors).expect("failed serde conversion"),
-        );
+        // FIXME: this fixes only rustdoc part of instability of trait impls
+        // for js files, see #120371
+        // Manually collect to string and sort to make list not depend on order
+        let mut implementors = implementors
+            .iter()
+            .map(|i| serde_json::to_string(i).expect("failed serde conversion"))
+            .collect::<Vec<_>>();
+        implementors.sort();
+
+        let implementors = format!(r#""{}":[{}]"#, krate.name(cx.tcx()), implementors.join(","));
 
         let mut mydst = dst.clone();
         for part in &remote_path[..remote_path.len() - 1] {