Skip to content

Commit d31ffe1

Browse files
authored
Merge pull request #444 from epage/col
fix: Pick correct origin for non-folded secondary snippets
2 parents ecb554d + eb47916 commit d31ffe1

2 files changed

Lines changed: 62 additions & 1 deletion

File tree

src/renderer/render.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,11 @@ fn render_snippet_annotations(
546546
buffer_msg_line_offset,
547547
max_line_num_len + 1,
548548
);
549-
if let Some(first_line) = annotated_lines.first() {
549+
if let Some(first_line) = annotated_lines
550+
.iter()
551+
.find(|l| !l.annotations.is_empty())
552+
.or(annotated_lines.first())
553+
{
550554
origin.line = Some(first_line.line_index);
551555
if let Some(first_annotation) = first_line.annotations.first() {
552556
origin.char_column = Some(first_annotation.start.char + 1);

tests/formatter.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5177,3 +5177,60 @@ help: consider making `bar` public
51775177
let renderer = renderer.decor_style(DecorStyle::Unicode);
51785178
assert_data_eq!(renderer.render(input), expected_unicode);
51795179
}
5180+
5181+
#[test]
5182+
fn prefer_first_annotation_on_secondary_snippets() {
5183+
let input = &[Level::ERROR
5184+
.primary_title("main diagnostic message")
5185+
.id("test-diagnostics")
5186+
.element(
5187+
Snippet::source("aardvark\nbeetle\ncanary\n")
5188+
.path("animals")
5189+
.fold(false)
5190+
.annotation(AnnotationKind::Primary.span(0..8)),
5191+
)
5192+
.element(
5193+
Snippet::source("inchworm\njackrabbit\nkangaroo\n")
5194+
.path("animals")
5195+
.fold(false)
5196+
.annotation(AnnotationKind::Context.span(20..28)),
5197+
)];
5198+
5199+
let expected_ascii = str![[r#"
5200+
error[test-diagnostics]: main diagnostic message
5201+
--> animals:1:1
5202+
|
5203+
1 | aardvark
5204+
| ^^^^^^^^
5205+
2 | beetle
5206+
3 | canary
5207+
|
5208+
::: animals:3:1
5209+
|
5210+
1 | inchworm
5211+
2 | jackrabbit
5212+
3 | kangaroo
5213+
| --------
5214+
"#]];
5215+
let renderer = Renderer::plain();
5216+
assert_data_eq!(renderer.render(input), expected_ascii);
5217+
5218+
let expected_unicode = str![[r#"
5219+
error[test-diagnostics]: main diagnostic message
5220+
╭▸ animals:1:1
5221+
5222+
1 │ aardvark
5223+
│ ━━━━━━━━
5224+
2 │ beetle
5225+
3 │ canary
5226+
5227+
⸬ animals:3:1
5228+
5229+
1 │ inchworm
5230+
2 │ jackrabbit
5231+
3 │ kangaroo
5232+
╰╴────────
5233+
"#]];
5234+
let renderer = renderer.decor_style(DecorStyle::Unicode);
5235+
assert_data_eq!(renderer.render(input), expected_unicode);
5236+
}

0 commit comments

Comments
 (0)