7
7
8
8
use std:: collections:: VecDeque ;
9
9
use std:: fmt:: { self , Display , Write } ;
10
- use std:: { cmp , iter} ;
10
+ use std:: iter;
11
11
12
+ use itertools:: Either ;
12
13
use rustc_data_structures:: fx:: FxIndexMap ;
13
14
use rustc_lexer:: { Cursor , FrontmatterAllowed , LiteralKind , TokenKind } ;
14
15
use rustc_span:: BytePos ;
@@ -168,8 +169,11 @@ impl Element {
168
169
let mut prev = parent_class;
169
170
let mut closing_tag = None ;
170
171
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
+ } ;
173
177
if part. class . is_some ( ) {
174
178
// We only try to generate links as the `<span>` should have already be generated
175
179
// by the caller of `write_elem_to`.
@@ -236,9 +240,7 @@ impl ElementStack {
236
240
if let Some ( ElementOrStack :: Element ( last) ) = self . elements . last_mut ( )
237
241
&& last. can_merge ( & elem)
238
242
{
239
- for part in elem. content . drain ( ..) {
240
- last. content . push ( part) ;
241
- }
243
+ last. content . append ( & mut elem. content ) ;
242
244
} else {
243
245
self . elements . push ( ElementOrStack :: Element ( elem) ) ;
244
246
}
@@ -262,9 +264,7 @@ impl ElementStack {
262
264
if self . pending_exit {
263
265
if can_merge ( self . class , class, "" ) {
264
266
self . pending_exit = false ;
265
- for elem in elements {
266
- self . elements . push ( elem) ;
267
- }
267
+ self . elements . extend ( elements) ;
268
268
// Compatible stacks, nothing to be done here!
269
269
return ;
270
270
}
0 commit comments