about summary refs log tree commit diff
path: root/src/librustdoc/fold.rs
diff options
context:
space:
mode:
authorLukas Markeffsky <@>2024-09-25 22:15:23 +0200
committerLukas Markeffsky <@>2024-09-25 23:45:57 +0200
commitb1745c3919b57d841c15fe0bfb0dd926ab59bafa (patch)
treeabe345fac4dea0fb54ce49b4207884700681ea98 /src/librustdoc/fold.rs
parent0399709cdc3c5cc22327e9f657dc7956546a0457 (diff)
downloadrust-b1745c3919b57d841c15fe0bfb0dd926ab59bafa.tar.gz
rust-b1745c3919b57d841c15fe0bfb0dd926ab59bafa.zip
de-rc external traits
Don't keep the `external_traits` as shared mutable data between the
`DocContext` and `clean::Crate`. Instead, move the data over when necessary.
This allows us to get rid of a borrowck hack in the `DocVisitor`.
Diffstat (limited to 'src/librustdoc/fold.rs')
-rw-r--r--src/librustdoc/fold.rs11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/librustdoc/fold.rs b/src/librustdoc/fold.rs
index c25a4ddb6f3..95e495205ae 100644
--- a/src/librustdoc/fold.rs
+++ b/src/librustdoc/fold.rs
@@ -1,3 +1,5 @@
+use std::mem;
+
 use crate::clean::*;
 
 pub(crate) fn strip_item(mut item: Item) -> Item {
@@ -116,10 +118,11 @@ pub(crate) trait DocFolder: Sized {
     fn fold_crate(&mut self, mut c: Crate) -> Crate {
         c.module = self.fold_item(c.module).unwrap();
 
-        let external_traits = { std::mem::take(&mut *c.external_traits.borrow_mut()) };
-        for (k, mut v) in external_traits {
-            v.items = v.items.into_iter().filter_map(|i| self.fold_item(i)).collect();
-            c.external_traits.borrow_mut().insert(k, v);
+        for trait_ in c.external_traits.values_mut() {
+            trait_.items = mem::take(&mut trait_.items)
+                .into_iter()
+                .filter_map(|i| self.fold_item(i))
+                .collect();
         }
 
         c