@@ -264,7 +264,6 @@ impl Renderer {
264
264
}
265
265
}
266
266
let mut message_iter = group. elements . iter ( ) . enumerate ( ) . peekable ( ) ;
267
- let mut last_was_suggestion = false ;
268
267
if let Some ( title) = & group. title {
269
268
let peek = message_iter. peek ( ) . map ( |( _, s) | s) . copied ( ) ;
270
269
let title_style = if g == 0 {
@@ -299,6 +298,7 @@ impl Renderer {
299
298
}
300
299
}
301
300
let mut seen_primary = false ;
301
+ let mut last_suggestion_path = None ;
302
302
while let Some ( ( i, section) ) = message_iter. next ( ) {
303
303
let peek = message_iter. peek ( ) . map ( |( _, s) | s) . copied ( ) ;
304
304
let is_first = i == 0 ;
@@ -314,7 +314,6 @@ impl Renderer {
314
314
peek. is_some ( ) ,
315
315
buffer_msg_line_offset,
316
316
) ;
317
- last_was_suggestion = false ;
318
317
}
319
318
Element :: Cause ( cause) => {
320
319
if let Some ( ( source_map, annotated_lines) ) =
@@ -354,22 +353,27 @@ impl Renderer {
354
353
}
355
354
}
356
355
}
357
-
358
- last_was_suggestion = false ;
359
356
}
360
357
Element :: Suggestion ( suggestion) => {
361
358
let source_map =
362
359
SourceMap :: new ( & suggestion. source , suggestion. line_start ) ;
360
+ let matches_previous_suggestion =
361
+ last_suggestion_path == Some ( suggestion. path . as_ref ( ) ) ;
363
362
self . emit_suggestion_default (
364
363
& mut buffer,
365
364
suggestion,
366
365
max_line_num_len,
367
366
& source_map,
368
367
primary_path. or ( og_primary_path) ,
369
- last_was_suggestion ,
368
+ matches_previous_suggestion ,
370
369
is_first,
371
370
) ;
372
- last_was_suggestion = true ;
371
+
372
+ if matches ! ( peek, Some ( Element :: Suggestion ( _) ) ) {
373
+ last_suggestion_path = Some ( suggestion. path . as_ref ( ) ) ;
374
+ } else {
375
+ last_suggestion_path = None ;
376
+ }
373
377
}
374
378
375
379
Element :: Origin ( origin) => {
@@ -384,7 +388,6 @@ impl Renderer {
384
388
is_first,
385
389
buffer_msg_line_offset,
386
390
) ;
387
- last_was_suggestion = false ;
388
391
}
389
392
Element :: Padding ( _) => {
390
393
let current_line = buffer. num_lines ( ) ;
@@ -1614,48 +1617,46 @@ impl Renderer {
1614
1617
max_line_num_len : usize ,
1615
1618
sm : & SourceMap < ' _ > ,
1616
1619
primary_path : Option < & Cow < ' _ , str > > ,
1617
- is_cont : bool ,
1620
+ matches_previous_suggestion : bool ,
1618
1621
is_first : bool ,
1619
1622
) {
1620
1623
let suggestions = sm. splice_lines ( suggestion. markers . clone ( ) ) ;
1621
1624
1622
1625
let buffer_offset = buffer. num_lines ( ) ;
1623
- let mut row_num = buffer_offset + usize:: from ( !is_cont ) ;
1624
- for ( i , ( complete, parts, highlights) ) in suggestions. iter ( ) . enumerate ( ) {
1626
+ let mut row_num = buffer_offset + usize:: from ( !matches_previous_suggestion ) ;
1627
+ for ( complete, parts, highlights) in & suggestions {
1625
1628
let has_deletion = parts
1626
1629
. iter ( )
1627
1630
. any ( |p| p. is_deletion ( sm) || p. is_destructive_replacement ( sm) ) ;
1628
1631
let is_multiline = complete. lines ( ) . count ( ) > 1 ;
1629
1632
1630
- if i == 0 {
1631
- self . draw_col_separator_start ( buffer, row_num - 1 , max_line_num_len + 1 ) ;
1632
- } else {
1633
+ if matches_previous_suggestion {
1633
1634
buffer. puts (
1634
1635
row_num - 1 ,
1635
1636
max_line_num_len + 1 ,
1636
1637
self . multi_suggestion_separator ( ) ,
1637
1638
ElementStyle :: LineNumber ,
1638
1639
) ;
1640
+ } else {
1641
+ self . draw_col_separator_start ( buffer, row_num - 1 , max_line_num_len + 1 ) ;
1639
1642
}
1640
1643
if suggestion. path . as_ref ( ) != primary_path {
1641
1644
if let Some ( path) = suggestion. path . as_ref ( ) {
1642
- let ( loc, _) = sm. span_to_locations ( parts[ 0 ] . span . clone ( ) ) ;
1643
- // --> file.rs:line:col
1644
- // |
1645
- let arrow = self . file_start ( is_first) ;
1646
- buffer. puts ( row_num - 1 , 0 , arrow, ElementStyle :: LineNumber ) ;
1647
- let message = format ! ( "{}:{}:{}" , path, loc. line, loc. char + 1 ) ;
1648
- if is_cont {
1649
- buffer. append ( row_num - 1 , & message, ElementStyle :: LineAndColumn ) ;
1650
- } else {
1645
+ if !matches_previous_suggestion {
1646
+ let ( loc, _) = sm. span_to_locations ( parts[ 0 ] . span . clone ( ) ) ;
1647
+ // --> file.rs:line:col
1648
+ // |
1649
+ let arrow = self . file_start ( is_first) ;
1650
+ buffer. puts ( row_num - 1 , 0 , arrow, ElementStyle :: LineNumber ) ;
1651
+ let message = format ! ( "{}:{}:{}" , path, loc. line, loc. char + 1 ) ;
1651
1652
let col = usize:: max ( max_line_num_len + 1 , arrow. len ( ) ) ;
1652
1653
buffer. puts ( row_num - 1 , col, & message, ElementStyle :: LineAndColumn ) ;
1654
+ for _ in 0 ..max_line_num_len {
1655
+ buffer. prepend ( row_num - 1 , " " , ElementStyle :: NoStyle ) ;
1656
+ }
1657
+ self . draw_col_separator_no_space ( buffer, row_num, max_line_num_len + 1 ) ;
1658
+ row_num += 1 ;
1653
1659
}
1654
- for _ in 0 ..max_line_num_len {
1655
- buffer. prepend ( row_num - 1 , " " , ElementStyle :: NoStyle ) ;
1656
- }
1657
- self . draw_col_separator_no_space ( buffer, row_num, max_line_num_len + 1 ) ;
1658
- row_num += 1 ;
1659
1660
}
1660
1661
}
1661
1662
let show_code_change = if has_deletion && !is_multiline {
0 commit comments