Skip to content

Commit 2ae1bf4

Browse files
Improve performance
1 parent bb5e335 commit 2ae1bf4

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/librustdoc/html/highlight.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
88
use std::collections::VecDeque;
99
use std::fmt::{self, Display, Write};
10-
use std::{cmp, iter};
10+
use std::iter;
1111

12+
use itertools::Either;
1213
use rustc_data_structures::fx::FxIndexMap;
1314
use rustc_lexer::{Cursor, FrontmatterAllowed, LiteralKind, TokenKind};
1415
use rustc_span::BytePos;
@@ -168,8 +169,11 @@ impl Element {
168169
let mut prev = parent_class;
169170
let mut closing_tag = None;
170171
for part in &self.content {
171-
let text: &dyn Display =
172-
if part.needs_escape { &EscapeBodyText(&part.text) } else { &part.text };
172+
let text = if part.needs_escape {
173+
Either::Left(&EscapeBodyText(&part.text))
174+
} else {
175+
Either::Right(&part.text)
176+
};
173177
if part.class.is_some() {
174178
// We only try to generate links as the `<span>` should have already be generated
175179
// by the caller of `write_elem_to`.
@@ -236,9 +240,7 @@ impl ElementStack {
236240
if let Some(ElementOrStack::Element(last)) = self.elements.last_mut()
237241
&& last.can_merge(&elem)
238242
{
239-
for part in elem.content.drain(..) {
240-
last.content.push(part);
241-
}
243+
last.content.append(&mut elem.content);
242244
} else {
243245
self.elements.push(ElementOrStack::Element(elem));
244246
}
@@ -262,9 +264,7 @@ impl ElementStack {
262264
if self.pending_exit {
263265
if can_merge(self.class, class, "") {
264266
self.pending_exit = false;
265-
for elem in elements {
266-
self.elements.push(elem);
267-
}
267+
self.elements.extend(elements);
268268
// Compatible stacks, nothing to be done here!
269269
return;
270270
}

0 commit comments

Comments
 (0)