Skip to content

Commit 3b2ad7a

Browse files
committed
fix: Draw file start continuation if not first in group
1 parent 4680ba8 commit 3b2ad7a

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/renderer/mod.rs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,10 @@ impl Renderer {
263263
source_map_annotated_lines.push_back((source_map, annotated_lines));
264264
}
265265
}
266-
let mut message_iter = group.elements.iter().peekable();
266+
let mut message_iter = group.elements.iter().enumerate().peekable();
267267
let mut last_was_suggestion = false;
268268
if let Some(title) = &group.title {
269-
let peek = message_iter.peek().copied();
269+
let peek = message_iter.peek().map(|(_, s)| s).copied();
270270
let title_style = if g == 0 {
271271
TitleStyle::MainHeader
272272
} else {
@@ -299,8 +299,8 @@ impl Renderer {
299299
}
300300
}
301301
let mut seen_primary = false;
302-
while let Some(section) = message_iter.next() {
303-
let peek = message_iter.peek().copied();
302+
while let Some((i, section)) = message_iter.next() {
303+
let peek = message_iter.peek().map(|(_, s)| s).copied();
304304
match &section {
305305
Element::Message(title) => {
306306
let title_style = TitleStyle::Secondary;
@@ -331,6 +331,7 @@ impl Renderer {
331331
&annotated_lines,
332332
max_depth,
333333
peek.is_some() || (g == 0 && group_len > 1),
334+
i == 0,
334335
);
335336

336337
if g == 0 {
@@ -365,6 +366,7 @@ impl Renderer {
365366
&source_map,
366367
primary_path.or(og_primary_path),
367368
last_was_suggestion,
369+
i == 0,
368370
);
369371
last_was_suggestion = true;
370372
}
@@ -378,6 +380,7 @@ impl Renderer {
378380
max_line_num_len,
379381
origin,
380382
is_primary,
383+
i == 0,
381384
buffer_msg_line_offset,
382385
);
383386
last_was_suggestion = false;
@@ -484,7 +487,7 @@ impl Renderer {
484487
}
485488
}
486489

487-
self.render_origin(&mut buffer, 0, &origin, true, 0);
490+
self.render_origin(&mut buffer, 0, &origin, true, true, 0);
488491
buffer.append(0, ": ", ElementStyle::LineAndColumn);
489492
}
490493
}
@@ -633,12 +636,13 @@ impl Renderer {
633636
max_line_num_len: usize,
634637
origin: &Origin<'_>,
635638
is_primary: bool,
639+
is_first: bool,
636640
buffer_msg_line_offset: usize,
637641
) {
638642
if is_primary && !self.short_message {
639643
buffer.prepend(
640644
buffer_msg_line_offset,
641-
self.file_start(),
645+
self.file_start(is_first),
642646
ElementStyle::LineNumber,
643647
);
644648
} else if !self.short_message {
@@ -696,6 +700,7 @@ impl Renderer {
696700
annotated_lines: &[AnnotatedLineInfo<'_>],
697701
multiline_depth: usize,
698702
is_cont: bool,
703+
is_first: bool,
699704
) {
700705
if let Some(path) = &snippet.path {
701706
let mut origin = Origin::path(path.as_ref());
@@ -748,6 +753,7 @@ impl Renderer {
748753
max_line_num_len,
749754
&origin,
750755
is_primary,
756+
is_first,
751757
buffer_msg_line_offset,
752758
);
753759
// Put in the spacer between the location and annotated source
@@ -763,7 +769,7 @@ impl Renderer {
763769
buffer.puts(
764770
buffer_msg_line_offset,
765771
max_line_num_len,
766-
self.file_start(),
772+
self.file_start(is_first),
767773
ElementStyle::LineNumber,
768774
);
769775
} else {
@@ -1599,6 +1605,7 @@ impl Renderer {
15991605
.collect::<Vec<_>>()
16001606
}
16011607

1608+
#[allow(clippy::too_many_arguments)]
16021609
fn emit_suggestion_default(
16031610
&self,
16041611
buffer: &mut StyledBuffer,
@@ -1607,6 +1614,7 @@ impl Renderer {
16071614
sm: &SourceMap<'_>,
16081615
primary_path: Option<&Cow<'_, str>>,
16091616
is_cont: bool,
1617+
is_first: bool,
16101618
) {
16111619
let suggestions = sm.splice_lines(suggestion.markers.clone());
16121620

@@ -1633,7 +1641,7 @@ impl Renderer {
16331641
let (loc, _) = sm.span_to_locations(parts[0].span.clone());
16341642
// --> file.rs:line:col
16351643
// |
1636-
let arrow = self.file_start();
1644+
let arrow = self.file_start(is_first);
16371645
buffer.puts(row_num - 1, 0, arrow, ElementStyle::LineNumber);
16381646
let message = format!("{}:{}:{}", path, loc.line, loc.char + 1);
16391647
if is_cont {
@@ -2444,10 +2452,11 @@ impl Renderer {
24442452
)
24452453
}
24462454

2447-
fn file_start(&self) -> &'static str {
2455+
fn file_start(&self, is_first: bool) -> &'static str {
24482456
match self.theme {
24492457
OutputTheme::Ascii => "--> ",
2450-
OutputTheme::Unicode => " ╭▸ ",
2458+
OutputTheme::Unicode if is_first => " ╭▸ ",
2459+
OutputTheme::Unicode => " ├▸ ",
24512460
}
24522461
}
24532462

tests/formatter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3141,7 +3141,7 @@ LL | t.field;
31413141
error[E0609]: no field `field` on type `Thing`
31423142
31433143
├ note: a `Title` then a `Message`!?!?
3144-
▸ $DIR/too-many-field-suggestions.rs:26:7
3144+
▸ $DIR/too-many-field-suggestions.rs:26:7
31453145
31463146
LL │ t.field;
31473147
╰╴ ━━━━━ unknown field

0 commit comments

Comments
 (0)