77
88use std:: collections:: VecDeque ;
99use std:: fmt:: { self , Display , Write } ;
10- use std:: { cmp , iter} ;
10+ use std:: iter;
1111
12+ use itertools:: Either ;
1213use rustc_data_structures:: fx:: FxIndexMap ;
1314use rustc_lexer:: { Cursor , FrontmatterAllowed , LiteralKind , TokenKind } ;
1415use 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