Skip to content

Commit b56c383

Browse files
committed
Use drain to avoid moving elements of the vector twice
1 parent 76cd3ba commit b56c383

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

src/librustdoc/passes/collect_trait_impls.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,25 +132,28 @@ crate fn collect_trait_impls(krate: Crate, cx: &DocContext<'_>) -> Crate {
132132
}
133133
}
134134

135-
new_items.retain(|it| {
136-
if let ImplItem(Impl { ref for_, ref trait_, ref blanket_impl, .. }) = *it.kind {
137-
cleaner.keep_impl(for_)
138-
|| trait_.as_ref().map_or(false, |t| cleaner.keep_impl(t))
139-
|| blanket_impl.is_some()
140-
} else {
141-
true
142-
}
143-
});
144-
145-
if let Some(ref mut it) = krate.module {
135+
let items = if let Some(ref mut it) = krate.module {
146136
if let ModuleItem(Module { ref mut items, .. }) = *it.kind {
147-
items.extend(synth.impls);
148-
items.extend(new_items);
137+
items
149138
} else {
150139
panic!("collect-trait-impls can't run");
151140
}
152141
} else {
153142
panic!("collect-trait-impls can't run");
143+
};
144+
145+
items.extend(synth.impls);
146+
for it in new_items.drain(..) {
147+
if let ImplItem(Impl { ref for_, ref trait_, ref blanket_impl, .. }) = *it.kind {
148+
if !(cleaner.keep_impl(for_)
149+
|| trait_.as_ref().map_or(false, |t| cleaner.keep_impl(t))
150+
|| blanket_impl.is_some())
151+
{
152+
continue;
153+
}
154+
}
155+
156+
items.push(it);
154157
}
155158

156159
krate

0 commit comments

Comments
 (0)