From 15e503f616b8c17834d7dbcd86169c828780a9d8 Mon Sep 17 00:00:00 2001 From: Karel Peeters Date: Mon, 14 Oct 2024 00:38:13 +0200 Subject: [PATCH 1/2] test: Add origin location test cases --- tests/formatter.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/formatter.rs b/tests/formatter.rs index 7f914de9..ab2eb076 100644 --- a/tests/formatter.rs +++ b/tests/formatter.rs @@ -905,3 +905,53 @@ error: unused optional dependency let renderer = Renderer::plain(); assert_data_eq!(renderer.render(input).to_string(), expected); } + +#[test] +fn origin_correct_start_line() { + let source = "aaa\nbbb\nccc\nddd\n"; + let input = Level::Error.title("title").snippet( + Snippet::source(source) + .origin("origin.txt") + .fold(false) + .annotation(Level::Error.span(8..8 + 3).label("annotation")), + ); + + let expected = str![[r#" +error: title + --> origin.txt:2:4 + | +1 | aaa +2 | bbb +3 | ccc + | ^^^ annotation +4 | ddd + | +"#]]; + let renderer = Renderer::plain(); + assert_data_eq!(renderer.render(input).to_string(), expected); +} + +#[test] +fn origin_correct_mid_line() { + let source = "aaa\nbbb\nccc\nddd\n"; + let input = Level::Error.title("title").snippet( + Snippet::source(source) + .origin("origin.txt") + .fold(false) + .annotation(Level::Error.span(8 + 1..8 + 3).label("annotation")), + ); + + let expected = str![[r#" +error: title + --> origin.txt:3:2 + | +1 | aaa +2 | bbb +3 | ccc + | ^^ annotation +4 | ddd + | +"#]]; + let renderer = Renderer::plain(); + assert_data_eq!(renderer.render(input).to_string(), expected); +} From 695e4284411f9f8b16a60cb193ef1ad678ee0b43 Mon Sep 17 00:00:00 2001 From: Karel Peeters Date: Mon, 14 Oct 2024 00:39:16 +0200 Subject: [PATCH 2/2] fix: Fix bug in origin location computation --- src/renderer/display_list.rs | 2 +- tests/formatter.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/display_list.rs b/src/renderer/display_list.rs index e2f0d74f..8884b0db 100644 --- a/src/renderer/display_list.rs +++ b/src/renderer/display_list.rs @@ -1149,7 +1149,7 @@ fn format_header<'a>( .. } = item { - if main_range >= range.0 && main_range <= range.1 + end_line.len() { + if main_range >= range.0 && main_range < range.1 + max(*end_line as usize, 1) { let char_column = text[0..(main_range - range.0).min(text.len())] .chars() .count(); diff --git a/tests/formatter.rs b/tests/formatter.rs index ab2eb076..6faab76d 100644 --- a/tests/formatter.rs +++ b/tests/formatter.rs @@ -918,7 +918,7 @@ fn origin_correct_start_line() { let expected = str![[r#" error: title - --> origin.txt:2:4 + --> origin.txt:3:1 | 1 | aaa 2 | bbb