From 5dd589c5c6ce45ff01877de83d31491410e94eee Mon Sep 17 00:00:00 2001 From: Scott Schafer Date: Wed, 3 Sep 2025 09:34:46 -0600 Subject: [PATCH 1/2] refactor: Make all examples use Unicode output --- examples/elide_header.rs | 4 +-- examples/elide_header.svg | 18 +++++----- examples/expected_type.rs | 4 +-- examples/expected_type.svg | 14 ++++---- examples/footer.rs | 4 +-- examples/footer.svg | 10 +++--- examples/format.rs | 4 +-- examples/format.svg | 52 ++++++++++++++--------------- examples/highlight_message.rs | 6 ++-- examples/highlight_message.svg | 30 ++++++++--------- examples/highlight_source.rs | 6 ++-- examples/highlight_source.svg | 12 +++---- examples/multislice.rs | 4 +-- examples/multislice.svg | 16 ++++----- examples/struct_name_as_context.rs | 4 +-- examples/struct_name_as_context.svg | 16 ++++----- 16 files changed, 104 insertions(+), 100 deletions(-) diff --git a/examples/elide_header.rs b/examples/elide_header.rs index 7ea2cf04..4c46c886 100644 --- a/examples/elide_header.rs +++ b/examples/elide_header.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; fn main() { let source = r#"# Docstring followed by a newline @@ -16,6 +16,6 @@ def foobar(door, bar={}): ) .element(Level::HELP.message("Replace with `None`; initialize within function"))]; - let renderer = Renderer::styled(); + let renderer = Renderer::styled().decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/elide_header.svg b/examples/elide_header.svg index ccec3e10..a8c42d1f 100644 --- a/examples/elide_header.svg +++ b/examples/elide_header.svg @@ -19,23 +19,23 @@ - | + ╭▸ - 1 | # Docstring followed by a newline + 1 # Docstring followed by a newline - 2 | + 2 - 3 | def foobar(door, bar={}): + 3 def foobar(door, bar={}): - | ^^ B006 + ━━ B006 - 4 | """ + 4 """ - 5 | """ + 5 """ - | + - = help: Replace with `None`; initialize within function + help: Replace with `None`; initialize within function diff --git a/examples/expected_type.rs b/examples/expected_type.rs index d8ba1869..c740acb7 100644 --- a/examples/expected_type.rs +++ b/examples/expected_type.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; fn main() { let source = r#" annotations: vec![SourceAnnotation { @@ -22,6 +22,6 @@ fn main() { ), ]; - let renderer = Renderer::styled(); + let renderer = Renderer::styled().decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/expected_type.svg b/examples/expected_type.svg index 7c1b073d..b88bc22e 100644 --- a/examples/expected_type.svg +++ b/examples/expected_type.svg @@ -21,19 +21,19 @@ error: expected type, found `22` - --> examples/footer.rs:29:25 + ╭▸ examples/footer.rs:29:25 - | + - 26 | annotations: vec![SourceAnnotation { + 26 annotations: vec![SourceAnnotation { - | ---------------- while parsing this struct + ──────────────── while parsing this struct - ... + - 29 | range: <22, 25>, + 29 range: <22, 25>, - | ^^ expected struct `annotate_snippets::snippet::Slice`, found reference + ╰╴ ━━ expected struct `annotate_snippets::snippet::Slice`, found reference diff --git a/examples/footer.rs b/examples/footer.rs index 1e208b5b..60671d45 100644 --- a/examples/footer.rs +++ b/examples/footer.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; fn main() { let report = @@ -16,6 +16,6 @@ fn main() { )), ]; - let renderer = Renderer::styled(); + let renderer = Renderer::styled().decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/footer.svg b/examples/footer.svg index e55ee041..ade493cc 100644 --- a/examples/footer.svg +++ b/examples/footer.svg @@ -22,15 +22,15 @@ error[E0308]: mismatched types - --> src/multislice.rs:13:22 + ╭▸ src/multislice.rs:13:22 - | + - 13 | slices: vec!["A", + 13 slices: vec!["A", - | ^^^ expected struct `annotate_snippets::snippet::Slice`, found reference + ━━━ expected struct `annotate_snippets::snippet::Slice`, found reference - | + ╰╴ note: expected type: `snippet::Annotation` diff --git a/examples/format.rs b/examples/format.rs index d9cef1b6..cb7387e3 100644 --- a/examples/format.rs +++ b/examples/format.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; fn main() { let source = r#") -> Option { @@ -42,6 +42,6 @@ fn main() { ), ]; - let renderer = Renderer::styled(); + let renderer = Renderer::styled().decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/format.svg b/examples/format.svg index e4a4042c..2832b9cd 100644 --- a/examples/format.svg +++ b/examples/format.svg @@ -21,57 +21,57 @@ error[E0308]: mismatched types - --> src/format.rs:52:5 + ╭▸ src/format.rs:52:5 - | + - 51 | ) -> Option<String> { + 51 ) -> Option<String> { - | -------------- expected `Option<String>` because of return type + ────────────── expected `Option<String>` because of return type - 52 | / for ann in annotations { + 52 for ann in annotations { - 53 | | match (ann.range.0, ann.range.1) { + 53 match (ann.range.0, ann.range.1) { - 54 | | (None, None) => continue, + 54 (None, None) => continue, - 55 | | (Some(start), Some(end)) if start > end_index => continue, + 55 (Some(start), Some(end)) if start > end_index => continue, - 56 | | (Some(start), Some(end)) if start >= start_index => { + 56 (Some(start), Some(end)) if start >= start_index => { - 57 | | let label = if let Some(ref label) = ann.label { + 57 let label = if let Some(ref label) = ann.label { - 58 | | format!(" {}", label) + 58 format!(" {}", label) - 59 | | } else { + 59 } else { - 60 | | String::from("") + 60 String::from("") - 61 | | }; + 61 }; - 62 | | + 62 - 63 | | return Some(format!( + 63 return Some(format!( - 64 | | "{}{}{}", + 64 "{}{}{}", - 65 | | " ".repeat(start - start_index), + 65 " ".repeat(start - start_index), - 66 | | "^".repeat(end - start), + 66 "^".repeat(end - start), - 67 | | label + 67 label - 68 | | )); + 68 )); - 69 | | } + 69 } - 70 | | _ => continue, + 70 _ => continue, - 71 | | } + 71 } - 72 | | } + 72 } - | |____^ expected enum `std::option::Option` + ╰╴┗━━━━┛ expected enum `std::option::Option` diff --git a/examples/highlight_message.rs b/examples/highlight_message.rs index 3f7107cd..76dd4871 100644 --- a/examples/highlight_message.rs +++ b/examples/highlight_message.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use anstyle::AnsiColor; use anstyle::Effects; use anstyle::Style; @@ -58,6 +58,8 @@ fn main() { ), ]; - let renderer = Renderer::styled().anonymized_line_numbers(true); + let renderer = Renderer::styled() + .anonymized_line_numbers(true) + .decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/highlight_message.svg b/examples/highlight_message.svg index c748a1de..7d00563f 100644 --- a/examples/highlight_message.svg +++ b/examples/highlight_message.svg @@ -23,39 +23,39 @@ error[E0308]: mismatched types - --> $DIR/highlighting.rs:21:11 + ╭▸ $DIR/highlighting.rs:21:11 - | + - LL | query(wrapped_fn); + LL query(wrapped_fn); - | ----- ^^^^^^^^^^ one type is more general than the other + ┬──── ━━━━━━━━━━ one type is more general than the other - | | + - | arguments to this function are incorrect + arguments to this function are incorrect - | + - = note: expected fn pointer `for<'a> fn(Box<(dyn Any + Send + 'a)>) -> Pin<_>` + note: expected fn pointer `for<'a> fn(Box<(dyn Any + Send + 'a)>) -> Pin<_>` found fn item `fn(Box<(dyn Any + Send + 'static)>) -> Pin<_> {wrapped_fn}` note: function defined here - --> $DIR/highlighting.rs:10:4 + ╭▸ $DIR/highlighting.rs:10:4 - | + - LL | fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<( + LL fn query(_: fn(Box<(dyn Any + Send + '_)>) -> Pin<Box<( - | ____^^^^^_- + ┌────━━━━━─┘ - LL | | dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static + LL dyn Future<Output = Result<Box<(dyn Any + 'static)>, String>> + Send + 'static - LL | | )>>) {} + LL )>>) {} - | |___- + ╰╴└───┘ diff --git a/examples/highlight_source.rs b/examples/highlight_source.rs index 514f6b7c..ae7b5217 100644 --- a/examples/highlight_source.rs +++ b/examples/highlight_source.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; fn main() { let source = r#"//@ compile-flags: -Z teach @@ -26,6 +26,8 @@ fn main() {} )]; - let renderer = Renderer::styled().anonymized_line_numbers(true); + let renderer = Renderer::styled() + .anonymized_line_numbers(true) + .decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/highlight_source.svg b/examples/highlight_source.svg index 14014944..0d360253 100644 --- a/examples/highlight_source.svg +++ b/examples/highlight_source.svg @@ -21,17 +21,17 @@ error[E0010]: allocations are not allowed in constants - --> $DIR/E0010-teach.rs:5:23 + ╭▸ $DIR/E0010-teach.rs:5:23 - | + - LL | const CON: Vec<i32> = vec![1, 2, 3]; //~ ERROR E0010 + LL const CON: Vec<i32> = vec![1, 2, 3]; //~ ERROR E0010 - | ^^^^^^^^^^^^^ allocation not allowed in constants + ━━━━━━━━━━━━━ allocation not allowed in constants - | + - = note: The runtime heap is not yet available at compile-time, so no runtime heap allocations can be created. + note: The runtime heap is not yet available at compile-time, so no runtime heap allocations can be created. diff --git a/examples/multislice.rs b/examples/multislice.rs index 3a2e7fa0..39b776b5 100644 --- a/examples/multislice.rs +++ b/examples/multislice.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{Annotation, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, Annotation, Group, Level, Renderer, Snippet}; fn main() { let report = &[ @@ -17,6 +17,6 @@ fn main() { ), ]; - let renderer = Renderer::styled(); + let renderer = Renderer::styled().decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/multislice.svg b/examples/multislice.svg index 47c98bc1..ad738b84 100644 --- a/examples/multislice.svg +++ b/examples/multislice.svg @@ -21,21 +21,21 @@ error: mismatched types - --> src/format.rs + ╭▸ src/format.rs - | + - 51 | Foo + 51 Foo - | + - ::: src/display.rs:129 + src/display.rs:129 - | + - 129 | Faa + 129 Faa - | + ╰╴ diff --git a/examples/struct_name_as_context.rs b/examples/struct_name_as_context.rs index 0271e04b..adc6c5bf 100644 --- a/examples/struct_name_as_context.rs +++ b/examples/struct_name_as_context.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; fn main() { let source = r#"struct S { field1: usize, @@ -22,6 +22,6 @@ fn main() { Level::HELP.message("unlike in C++, Java, and C#, functions are declared in `impl` blocks"), )]; - let renderer = Renderer::styled(); + let renderer = Renderer::styled().decor_style(DecorStyle::Unicode); anstream::println!("{}", renderer.render(report)); } diff --git a/examples/struct_name_as_context.svg b/examples/struct_name_as_context.svg index 177fbba0..8573af31 100644 --- a/examples/struct_name_as_context.svg +++ b/examples/struct_name_as_context.svg @@ -21,21 +21,21 @@ error: functions are not allowed in struct definitions - --> $DIR/struct_name_as_context.rs:6:5 + ╭▸ $DIR/struct_name_as_context.rs:6:5 - | + - 1 | struct S { + 1 struct S { - ... + - 6 | fn foo() {}, + 6 fn foo() {}, - | ^^^^^^^^^^^ + ━━━━━━━━━━━ - | + - = help: unlike in C++, Java, and C#, functions are declared in `impl` blocks + help: unlike in C++, Java, and C#, functions are declared in `impl` blocks From 91aebaa8692f2fd3bf067ced49aa9ccba50d7d0b Mon Sep 17 00:00:00 2001 From: Scott Schafer Date: Tue, 2 Sep 2025 03:22:36 -0600 Subject: [PATCH 2/2] chore: Make color tests have ascii and unicode SVG --- ...nn_eof.term.svg => ann_eof.ascii.term.svg} | 0 tests/color/ann_eof.rs | 11 ++- tests/color/ann_eof.unicode.term.svg | 34 ++++++++++ ....term.svg => ann_insertion.ascii.term.svg} | 0 tests/color/ann_insertion.rs | 11 ++- tests/color/ann_insertion.unicode.term.svg | 34 ++++++++++ ....term.svg => ann_multiline.ascii.term.svg} | 0 tests/color/ann_multiline.rs | 11 ++- tests/color/ann_multiline.unicode.term.svg | 40 +++++++++++ ...term.svg => ann_multiline2.ascii.term.svg} | 0 tests/color/ann_multiline2.rs | 11 ++- tests/color/ann_multiline2.unicode.term.svg | 42 ++++++++++++ ...term.svg => ann_removed_nl.ascii.term.svg} | 0 tests/color/ann_removed_nl.rs | 11 ++- tests/color/ann_removed_nl.unicode.term.svg | 34 ++++++++++ ...sure_emoji_highlight_width.ascii.term.svg} | 0 tests/color/ensure_emoji_highlight_width.rs | 11 ++- ...ure_emoji_highlight_width.unicode.term.svg | 34 ++++++++++ ...> first_snippet_is_primary.ascii.term.svg} | 0 tests/color/first_snippet_is_primary.rs | 11 ++- .../first_snippet_is_primary.unicode.term.svg | 54 +++++++++++++++ ....svg => fold_ann_multiline.ascii.term.svg} | 0 tests/color/fold_ann_multiline.rs | 11 ++- .../color/fold_ann_multiline.unicode.term.svg | 48 +++++++++++++ ...vg => fold_bad_origin_line.ascii.term.svg} | 0 tests/color/fold_bad_origin_line.rs | 11 ++- .../fold_bad_origin_line.unicode.term.svg | 34 ++++++++++ ...g.term.svg => fold_leading.ascii.term.svg} | 0 tests/color/fold_leading.rs | 11 ++- tests/color/fold_leading.unicode.term.svg | 34 ++++++++++ ....term.svg => fold_trailing.ascii.term.svg} | 0 tests/color/fold_trailing.rs | 11 ++- tests/color/fold_trailing.unicode.term.svg | 34 ++++++++++ ...ssue_9.term.svg => issue_9.ascii.term.svg} | 0 tests/color/issue_9.rs | 11 ++- tests/color/issue_9.unicode.term.svg | 46 +++++++++++++ ...ltiline_removal_suggestion.ascii.term.svg} | 0 tests/color/multiline_removal_suggestion.rs | 13 +++- ...tiline_removal_suggestion.unicode.term.svg | 68 +++++++++++++++++++ ...vg => multiple_annotations.ascii.term.svg} | 0 tests/color/multiple_annotations.rs | 11 ++- .../multiple_annotations.unicode.term.svg | 54 +++++++++++++++ ...primary_title_second_group.ascii.term.svg} | 0 tests/color/primary_title_second_group.rs | 10 ++- ...rimary_title_second_group.unicode.term.svg | 41 +++++++++++ ...{simple.term.svg => simple.ascii.term.svg} | 0 tests/color/simple.rs | 11 ++- tests/color/simple.unicode.term.svg | 42 ++++++++++++ ...ine.term.svg => strip_line.ascii.term.svg} | 0 tests/color/strip_line.rs | 11 ++- tests/color/strip_line.unicode.term.svg | 34 ++++++++++ ...erm.svg => strip_line_char.ascii.term.svg} | 0 tests/color/strip_line_char.rs | 11 ++- tests/color/strip_line_char.unicode.term.svg | 34 ++++++++++ ...m.svg => strip_line_non_ws.ascii.term.svg} | 0 tests/color/strip_line_non_ws.rs | 11 ++- .../color/strip_line_non_ws.unicode.term.svg | 38 +++++++++++ ...e.term.svg => styled_title.ascii.term.svg} | 0 tests/color/styled_title.rs | 11 ++- tests/color/styled_title.unicode.term.svg | 56 +++++++++++++++ 60 files changed, 996 insertions(+), 60 deletions(-) rename tests/color/{ann_eof.term.svg => ann_eof.ascii.term.svg} (100%) create mode 100644 tests/color/ann_eof.unicode.term.svg rename tests/color/{ann_insertion.term.svg => ann_insertion.ascii.term.svg} (100%) create mode 100644 tests/color/ann_insertion.unicode.term.svg rename tests/color/{ann_multiline.term.svg => ann_multiline.ascii.term.svg} (100%) create mode 100644 tests/color/ann_multiline.unicode.term.svg rename tests/color/{ann_multiline2.term.svg => ann_multiline2.ascii.term.svg} (100%) create mode 100644 tests/color/ann_multiline2.unicode.term.svg rename tests/color/{ann_removed_nl.term.svg => ann_removed_nl.ascii.term.svg} (100%) create mode 100644 tests/color/ann_removed_nl.unicode.term.svg rename tests/color/{ensure_emoji_highlight_width.term.svg => ensure_emoji_highlight_width.ascii.term.svg} (100%) create mode 100644 tests/color/ensure_emoji_highlight_width.unicode.term.svg rename tests/color/{first_snippet_is_primary.term.svg => first_snippet_is_primary.ascii.term.svg} (100%) create mode 100644 tests/color/first_snippet_is_primary.unicode.term.svg rename tests/color/{fold_ann_multiline.term.svg => fold_ann_multiline.ascii.term.svg} (100%) create mode 100644 tests/color/fold_ann_multiline.unicode.term.svg rename tests/color/{fold_bad_origin_line.term.svg => fold_bad_origin_line.ascii.term.svg} (100%) create mode 100644 tests/color/fold_bad_origin_line.unicode.term.svg rename tests/color/{fold_leading.term.svg => fold_leading.ascii.term.svg} (100%) create mode 100644 tests/color/fold_leading.unicode.term.svg rename tests/color/{fold_trailing.term.svg => fold_trailing.ascii.term.svg} (100%) create mode 100644 tests/color/fold_trailing.unicode.term.svg rename tests/color/{issue_9.term.svg => issue_9.ascii.term.svg} (100%) create mode 100644 tests/color/issue_9.unicode.term.svg rename tests/color/{multiline_removal_suggestion.term.svg => multiline_removal_suggestion.ascii.term.svg} (100%) create mode 100644 tests/color/multiline_removal_suggestion.unicode.term.svg rename tests/color/{multiple_annotations.term.svg => multiple_annotations.ascii.term.svg} (100%) create mode 100644 tests/color/multiple_annotations.unicode.term.svg rename tests/color/{primary_title_second_group.term.svg => primary_title_second_group.ascii.term.svg} (100%) create mode 100644 tests/color/primary_title_second_group.unicode.term.svg rename tests/color/{simple.term.svg => simple.ascii.term.svg} (100%) create mode 100644 tests/color/simple.unicode.term.svg rename tests/color/{strip_line.term.svg => strip_line.ascii.term.svg} (100%) create mode 100644 tests/color/strip_line.unicode.term.svg rename tests/color/{strip_line_char.term.svg => strip_line_char.ascii.term.svg} (100%) create mode 100644 tests/color/strip_line_char.unicode.term.svg rename tests/color/{strip_line_non_ws.term.svg => strip_line_non_ws.ascii.term.svg} (100%) create mode 100644 tests/color/strip_line_non_ws.unicode.term.svg rename tests/color/{styled_title.term.svg => styled_title.ascii.term.svg} (100%) create mode 100644 tests/color/styled_title.unicode.term.svg diff --git a/tests/color/ann_eof.term.svg b/tests/color/ann_eof.ascii.term.svg similarity index 100% rename from tests/color/ann_eof.term.svg rename to tests/color/ann_eof.ascii.term.svg diff --git a/tests/color/ann_eof.rs b/tests/color/ann_eof.rs index 6f192b9c..2e433250 100644 --- a/tests/color/ann_eof.rs +++ b/tests/color/ann_eof.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -12,7 +12,12 @@ fn case() { .annotation(AnnotationKind::Primary.span(4..4).label("")), ), ]; - let expected = file!["ann_eof.term.svg"]; + + let expected_ascii = file!["ann_eof.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["ann_eof.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/ann_eof.unicode.term.svg b/tests/color/ann_eof.unicode.term.svg new file mode 100644 index 00000000..bebb3acf --- /dev/null +++ b/tests/color/ann_eof.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error: expected `.`, `=` + + ╭▸ Cargo.toml:1:5 + + + + 1 asdf + + ╰╴ + + + + diff --git a/tests/color/ann_insertion.term.svg b/tests/color/ann_insertion.ascii.term.svg similarity index 100% rename from tests/color/ann_insertion.term.svg rename to tests/color/ann_insertion.ascii.term.svg diff --git a/tests/color/ann_insertion.rs b/tests/color/ann_insertion.rs index 453cdc7c..70efbc46 100644 --- a/tests/color/ann_insertion.rs +++ b/tests/color/ann_insertion.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -12,7 +12,12 @@ fn case() { .annotation(AnnotationKind::Primary.span(2..2).label("'d' belongs here")), ), ]; - let expected = file!["ann_insertion.term.svg"]; + + let expected_ascii = file!["ann_insertion.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["ann_insertion.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/ann_insertion.unicode.term.svg b/tests/color/ann_insertion.unicode.term.svg new file mode 100644 index 00000000..70355299 --- /dev/null +++ b/tests/color/ann_insertion.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error: expected `.`, `=` + + ╭▸ Cargo.toml:1:3 + + + + 1 asf + + ╰╴ 'd' belongs here + + + + diff --git a/tests/color/ann_multiline.term.svg b/tests/color/ann_multiline.ascii.term.svg similarity index 100% rename from tests/color/ann_multiline.term.svg rename to tests/color/ann_multiline.ascii.term.svg diff --git a/tests/color/ann_multiline.rs b/tests/color/ann_multiline.rs index d855de82..1f1c8f84 100644 --- a/tests/color/ann_multiline.rs +++ b/tests/color/ann_multiline.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -25,7 +25,12 @@ fn case() { .label("missing fields `lineno`, `content`"), ), )]; - let expected = file!["ann_multiline.term.svg"]; + + let expected_ascii = file!["ann_multiline.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["ann_multiline.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/ann_multiline.unicode.term.svg b/tests/color/ann_multiline.unicode.term.svg new file mode 100644 index 00000000..77bf28ad --- /dev/null +++ b/tests/color/ann_multiline.unicode.term.svg @@ -0,0 +1,40 @@ + + + + + + + error[E0027]: pattern does not mention fields `lineno`, `content` + + ╭▸ src/display_list.rs:139:32 + + + + 139 if let DisplayLine::Source { + + ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + + 140 ref mut inline_marks, + + 141 } = body[body_idx] + + ╰╴┗━━━━━━━━━━━━━━━━━━━━━━━━━┛ missing fields `lineno`, `content` + + + + diff --git a/tests/color/ann_multiline2.term.svg b/tests/color/ann_multiline2.ascii.term.svg similarity index 100% rename from tests/color/ann_multiline2.term.svg rename to tests/color/ann_multiline2.ascii.term.svg diff --git a/tests/color/ann_multiline2.rs b/tests/color/ann_multiline2.rs index fe1a1751..34693337 100644 --- a/tests/color/ann_multiline2.rs +++ b/tests/color/ann_multiline2.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -25,7 +25,12 @@ to exactly one character on next line. .label("this should not be on separate lines"), ), )]; - let expected = file!["ann_multiline2.term.svg"]; + + let expected_ascii = file!["ann_multiline2.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["ann_multiline2.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/ann_multiline2.unicode.term.svg b/tests/color/ann_multiline2.unicode.term.svg new file mode 100644 index 00000000..942c6447 --- /dev/null +++ b/tests/color/ann_multiline2.unicode.term.svg @@ -0,0 +1,42 @@ + + + + + + + error[E####]: spacing error found + + ╭▸ foo.txt:26:12 + + + + 26 This is an example + + ┏━━━━━━━━━━━━┛ + + 27 of an edge case of an annotation overflowing + + ┗━┛ this should not be on separate lines + + 28 to exactly one character on next line. + + ╰╴ + + + + diff --git a/tests/color/ann_removed_nl.term.svg b/tests/color/ann_removed_nl.ascii.term.svg similarity index 100% rename from tests/color/ann_removed_nl.term.svg rename to tests/color/ann_removed_nl.ascii.term.svg diff --git a/tests/color/ann_removed_nl.rs b/tests/color/ann_removed_nl.rs index ff5a717f..fddf2db0 100644 --- a/tests/color/ann_removed_nl.rs +++ b/tests/color/ann_removed_nl.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -12,7 +12,12 @@ fn case() { .annotation(AnnotationKind::Primary.span(4..5).label("")), ), ]; - let expected = file!["ann_removed_nl.term.svg"]; + + let expected_ascii = file!["ann_removed_nl.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["ann_removed_nl.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/ann_removed_nl.unicode.term.svg b/tests/color/ann_removed_nl.unicode.term.svg new file mode 100644 index 00000000..bebb3acf --- /dev/null +++ b/tests/color/ann_removed_nl.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error: expected `.`, `=` + + ╭▸ Cargo.toml:1:5 + + + + 1 asdf + + ╰╴ + + + + diff --git a/tests/color/ensure_emoji_highlight_width.term.svg b/tests/color/ensure_emoji_highlight_width.ascii.term.svg similarity index 100% rename from tests/color/ensure_emoji_highlight_width.term.svg rename to tests/color/ensure_emoji_highlight_width.ascii.term.svg diff --git a/tests/color/ensure_emoji_highlight_width.rs b/tests/color/ensure_emoji_highlight_width.rs index c3662f1e..93057ca0 100644 --- a/tests/color/ensure_emoji_highlight_width.rs +++ b/tests/color/ensure_emoji_highlight_width.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -14,7 +14,12 @@ fn case() { .line_start(7) .annotation(AnnotationKind::Primary.span(0..35).label("")) )]; - let expected = file!["ensure_emoji_highlight_width.term.svg"]; + + let expected_ascii = file!["ensure_emoji_highlight_width.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["ensure_emoji_highlight_width.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/ensure_emoji_highlight_width.unicode.term.svg b/tests/color/ensure_emoji_highlight_width.unicode.term.svg new file mode 100644 index 00000000..4c3bcae5 --- /dev/null +++ b/tests/color/ensure_emoji_highlight_width.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error: invalid character ` ` in package name: `haha this isn't a valid name 🐛`, characters must be Unicode XID characters (numbers, `-`, `_`, or most letters) + + ╭▸ <file>:7:1 + + + + 7 "haha this isn't a valid name 🐛" = { package = "libc", version = "0.1" } + + ╰╴━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + + + diff --git a/tests/color/first_snippet_is_primary.term.svg b/tests/color/first_snippet_is_primary.ascii.term.svg similarity index 100% rename from tests/color/first_snippet_is_primary.term.svg rename to tests/color/first_snippet_is_primary.ascii.term.svg diff --git a/tests/color/first_snippet_is_primary.rs b/tests/color/first_snippet_is_primary.rs index 537ec871..0ee144a6 100644 --- a/tests/color/first_snippet_is_primary.rs +++ b/tests/color/first_snippet_is_primary.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -42,7 +42,12 @@ fn case() { .message("expected reference `&[u8]`\n found reference `&'static str`"), ), ]; - let expected = file!["first_snippet_is_primary.term.svg"]; + + let expected_ascii = file!["first_snippet_is_primary.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["first_snippet_is_primary.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/first_snippet_is_primary.unicode.term.svg b/tests/color/first_snippet_is_primary.unicode.term.svg new file mode 100644 index 00000000..e846bb9a --- /dev/null +++ b/tests/color/first_snippet_is_primary.unicode.term.svg @@ -0,0 +1,54 @@ + + + + + + + error[E0308]: mismatched types + + ╭▸ $DIR/file.txt:3:1 + + + + 3 this is from a txt file + + ─────────────────────── the macro expands to this string + + + + $DIR/mismatched-types.rs:2:12 + + + + 2 let b: &[u8] = include_str!("file.txt"); + + ┬──── ━━━━━━━━━━━━━━━━━━━━━━━━ expected `&[u8]`, found `&str` + + + + expected due to this + + + + note: expected reference `&[u8]` + + found reference `&'static str` + + + + diff --git a/tests/color/fold_ann_multiline.term.svg b/tests/color/fold_ann_multiline.ascii.term.svg similarity index 100% rename from tests/color/fold_ann_multiline.term.svg rename to tests/color/fold_ann_multiline.ascii.term.svg diff --git a/tests/color/fold_ann_multiline.rs b/tests/color/fold_ann_multiline.rs index 9ce7dd70..7fba4f92 100644 --- a/tests/color/fold_ann_multiline.rs +++ b/tests/color/fold_ann_multiline.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -43,7 +43,12 @@ fn case() { ), ), ]; - let expected = file!["fold_ann_multiline.term.svg"]; + + let expected_ascii = file!["fold_ann_multiline.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["fold_ann_multiline.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/fold_ann_multiline.unicode.term.svg b/tests/color/fold_ann_multiline.unicode.term.svg new file mode 100644 index 00000000..92dea608 --- /dev/null +++ b/tests/color/fold_ann_multiline.unicode.term.svg @@ -0,0 +1,48 @@ + + + + + + + error[E0308]: mismatched types + + ╭▸ src/format.rs:52:1 + + + + 51 ) -> Option<String> { + + ────────────── expected `std::option::Option<std::string::String>` because of return type + + 52 for ann in annotations { + + 53 match (ann.range.0, ann.range.1) { + + 54 (None, None) => continue, + + 55 (Some(start), Some(end)) if start > end_index || end < start_index => continue, + + + + 72 } + + ╰╴┗━━━━━┛ expected enum `std::option::Option`, found () + + + + diff --git a/tests/color/fold_bad_origin_line.term.svg b/tests/color/fold_bad_origin_line.ascii.term.svg similarity index 100% rename from tests/color/fold_bad_origin_line.term.svg rename to tests/color/fold_bad_origin_line.ascii.term.svg diff --git a/tests/color/fold_bad_origin_line.rs b/tests/color/fold_bad_origin_line.rs index de2f255e..e101cfe9 100644 --- a/tests/color/fold_bad_origin_line.rs +++ b/tests/color/fold_bad_origin_line.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -15,7 +15,12 @@ invalid syntax .line_start(1) .annotation(AnnotationKind::Context.span(2..16).label("error here")), )]; - let expected = file!["fold_bad_origin_line.term.svg"]; + + let expected_ascii = file!["fold_bad_origin_line.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["fold_bad_origin_line.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/fold_bad_origin_line.unicode.term.svg b/tests/color/fold_bad_origin_line.unicode.term.svg new file mode 100644 index 00000000..d4a8be56 --- /dev/null +++ b/tests/color/fold_bad_origin_line.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error: + + ╭▸ path/to/error.rs:3:1 + + + + 3 invalid syntax + + ╰╴────────────── error here + + + + diff --git a/tests/color/fold_leading.term.svg b/tests/color/fold_leading.ascii.term.svg similarity index 100% rename from tests/color/fold_leading.term.svg rename to tests/color/fold_leading.ascii.term.svg diff --git a/tests/color/fold_leading.rs b/tests/color/fold_leading.rs index dffa05d6..493a3e48 100644 --- a/tests/color/fold_leading.rs +++ b/tests/color/fold_leading.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -28,7 +28,12 @@ workspace = 20 .line_start(1) .annotation(AnnotationKind::Primary.span(132..134).label("")), )]; - let expected = file!["fold_leading.term.svg"]; + + let expected_ascii = file!["fold_leading.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["fold_leading.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/fold_leading.unicode.term.svg b/tests/color/fold_leading.unicode.term.svg new file mode 100644 index 00000000..aa1d865f --- /dev/null +++ b/tests/color/fold_leading.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error[E0308]: invalid type: integer `20`, expected a bool + + ╭▸ Cargo.toml:11:13 + + + + 11 workspace = 20 + + ╰╴ ━━ + + + + diff --git a/tests/color/fold_trailing.term.svg b/tests/color/fold_trailing.ascii.term.svg similarity index 100% rename from tests/color/fold_trailing.term.svg rename to tests/color/fold_trailing.ascii.term.svg diff --git a/tests/color/fold_trailing.rs b/tests/color/fold_trailing.rs index 408f00ab..f59a0b2f 100644 --- a/tests/color/fold_trailing.rs +++ b/tests/color/fold_trailing.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -27,7 +27,12 @@ edition = "2021" .line_start(1) .annotation(AnnotationKind::Primary.span(8..10).label("")), )]; - let expected = file!["fold_trailing.term.svg"]; + + let expected_ascii = file!["fold_trailing.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["fold_trailing.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/fold_trailing.unicode.term.svg b/tests/color/fold_trailing.unicode.term.svg new file mode 100644 index 00000000..a4453380 --- /dev/null +++ b/tests/color/fold_trailing.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error[E0308]: invalid type: integer `20`, expected a lints table + + ╭▸ Cargo.toml:1:9 + + + + 1 lints = 20 + + ╰╴ ━━ + + + + diff --git a/tests/color/issue_9.term.svg b/tests/color/issue_9.ascii.term.svg similarity index 100% rename from tests/color/issue_9.term.svg rename to tests/color/issue_9.ascii.term.svg diff --git a/tests/color/issue_9.rs b/tests/color/issue_9.rs index 9acb1693..2ca54a6d 100644 --- a/tests/color/issue_9.rs +++ b/tests/color/issue_9.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -22,7 +22,12 @@ x; .annotation(AnnotationKind::Primary.span(31..32).label("value used here after move")) ) ]; - let expected = file!["issue_9.term.svg"]; + + let expected_ascii = file!["issue_9.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["issue_9.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/issue_9.unicode.term.svg b/tests/color/issue_9.unicode.term.svg new file mode 100644 index 00000000..b870c160 --- /dev/null +++ b/tests/color/issue_9.unicode.term.svg @@ -0,0 +1,46 @@ + + + + + + + error: expected one of `.`, `;`, `?`, or an operator, found `for` + + ╭▸ /code/rust/src/test/ui/annotate-snippet/suggestion.rs:9:1 + + + + 4 let x = vec![1]; + + move occurs because `x` has type `std::vec::Vec<i32>`, which does not implement the `Copy` trait + + + + 7 let y = x; + + value moved here + + 8 + + 9 x; + + ╰╴ value used here after move + + + + diff --git a/tests/color/multiline_removal_suggestion.term.svg b/tests/color/multiline_removal_suggestion.ascii.term.svg similarity index 100% rename from tests/color/multiline_removal_suggestion.term.svg rename to tests/color/multiline_removal_suggestion.ascii.term.svg diff --git a/tests/color/multiline_removal_suggestion.rs b/tests/color/multiline_removal_suggestion.rs index ede35b4d..851de358 100644 --- a/tests/color/multiline_removal_suggestion.rs +++ b/tests/color/multiline_removal_suggestion.rs @@ -1,4 +1,6 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Origin, Patch, Renderer, Snippet}; +use annotate_snippets::{ + renderer::DecorStyle, AnnotationKind, Group, Level, Origin, Patch, Renderer, Snippet, +}; use snapbox::{assert_data_eq, file}; @@ -99,7 +101,12 @@ fn main() {} .patch(Patch::new(708..768, "")), ), ]; - let expected = file!["multiline_removal_suggestion.term.svg"]; + + let expected_ascii = file!["multiline_removal_suggestion.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["multiline_removal_suggestion.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/multiline_removal_suggestion.unicode.term.svg b/tests/color/multiline_removal_suggestion.unicode.term.svg new file mode 100644 index 00000000..52360f4c --- /dev/null +++ b/tests/color/multiline_removal_suggestion.unicode.term.svg @@ -0,0 +1,68 @@ + + + + + + + error[E0277]: `(bool, HashSet<u8>)` is not an iterator + + ╭▸ $DIR/multiline-removal-suggestion.rs:21:8 + + + + 21 }).flatten() + + ━━━━━━━ `(bool, HashSet<u8>)` is not an iterator + + + + help: the trait `Iterator` is not implemented for `(bool, HashSet<u8>)` + + note: required for `(bool, HashSet<u8>)` to implement `IntoIterator` + + note: required by a bound in `flatten` + + ╭▸ /rustc/FAKE_PREFIX/library/core/src/iter/traits/iterator.rs:1556:4 + + help: consider removing this method call, as the receiver has type `std::vec::IntoIter<HashSet<u8>>` and `std::vec::IntoIter<HashSet<u8>>: Iterator` trivially holds + + ╭╴ + + 15 - ts.into_iter() + + 16 - .map(|t| { + + 17 - ( + + 18 - is_true, + + 19 - t, + + 20 - ) + + 21 - }).flatten() + + 15 + ts.into_iter().flatten() + + ╰╴ + + + + diff --git a/tests/color/multiple_annotations.term.svg b/tests/color/multiple_annotations.ascii.term.svg similarity index 100% rename from tests/color/multiple_annotations.term.svg rename to tests/color/multiple_annotations.ascii.term.svg diff --git a/tests/color/multiple_annotations.rs b/tests/color/multiple_annotations.rs index 23f0ac9e..bdf0c998 100644 --- a/tests/color/multiple_annotations.rs +++ b/tests/color/multiple_annotations.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -35,7 +35,12 @@ fn case() { .label("Referenced again here"), ), )]; - let expected = file!["multiple_annotations.term.svg"]; + + let expected_ascii = file!["multiple_annotations.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["multiple_annotations.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/multiple_annotations.unicode.term.svg b/tests/color/multiple_annotations.unicode.term.svg new file mode 100644 index 00000000..5c06464e --- /dev/null +++ b/tests/color/multiple_annotations.unicode.term.svg @@ -0,0 +1,54 @@ + + + + + + + error: + + ╭▸ + + 96 fn add_title_line(result: &mut Vec<String>, main_annotation: Option<&Annotation>) { + + 97 if let Some(annotation) = main_annotation { + + ━━━━━━━━━━ Variable defined here + + 98 result.push(format_title_line( + + 99 &annotation.annotation_type, + + ━━━━━━━━━━ Referenced here + + 100 None, + + 101 &annotation.label, + + ━━━━━━━━━━ Referenced again here + + 102 )); + + 103 } + + 104 } + + ╰╴ + + + + diff --git a/tests/color/primary_title_second_group.term.svg b/tests/color/primary_title_second_group.ascii.term.svg similarity index 100% rename from tests/color/primary_title_second_group.term.svg rename to tests/color/primary_title_second_group.ascii.term.svg diff --git a/tests/color/primary_title_second_group.rs b/tests/color/primary_title_second_group.rs index dfab58d0..7d30f953 100644 --- a/tests/color/primary_title_second_group.rs +++ b/tests/color/primary_title_second_group.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -19,7 +19,11 @@ fn case() { )), ]; - let expected = file!["primary_title_second_group.term.svg"]; + let expected_ascii = file!["primary_title_second_group.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(report), expected); + assert_data_eq!(renderer.render(report), expected_ascii); + + let expected_unicode = file!["primary_title_second_group.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(report), expected_unicode); } diff --git a/tests/color/primary_title_second_group.unicode.term.svg b/tests/color/primary_title_second_group.unicode.term.svg new file mode 100644 index 00000000..3b8b9be3 --- /dev/null +++ b/tests/color/primary_title_second_group.unicode.term.svg @@ -0,0 +1,41 @@ + + + + + + + error[E0308]: mismatched types + + ╭▸ src/multislice.rs:13:22 + + + + 13 slices: vec!["A", + + ━━━ expected struct `annotate_snippets::snippet::Slice`, found reference + + ╰╴ + + note: expected type: `snippet::Annotation` + + found type: `__&__snippet::Annotation` + + + + diff --git a/tests/color/simple.term.svg b/tests/color/simple.ascii.term.svg similarity index 100% rename from tests/color/simple.term.svg rename to tests/color/simple.ascii.term.svg diff --git a/tests/color/simple.rs b/tests/color/simple.rs index 9e0002b8..655b6c76 100644 --- a/tests/color/simple.rs +++ b/tests/color/simple.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -27,7 +27,12 @@ fn case() { .label("expected one of `.`, `;`, `?`, or an operator here"), ), )]; - let expected = file!["simple.term.svg"]; + + let expected_ascii = file!["simple.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["simple.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/simple.unicode.term.svg b/tests/color/simple.unicode.term.svg new file mode 100644 index 00000000..e3457760 --- /dev/null +++ b/tests/color/simple.unicode.term.svg @@ -0,0 +1,42 @@ + + + + + + + error: expected one of `.`, `;`, `?`, or an operator, found `for` + + ╭▸ src/format_color.rs:171:9 + + + + 169 }) + + ┌───────────┘ + + 170 + + └─┘ expected one of `.`, `;`, `?`, or an operator here + + 171 for line in &self.body { + + ╰╴ ━━━ unexpected token + + + + diff --git a/tests/color/strip_line.term.svg b/tests/color/strip_line.ascii.term.svg similarity index 100% rename from tests/color/strip_line.term.svg rename to tests/color/strip_line.ascii.term.svg diff --git a/tests/color/strip_line.rs b/tests/color/strip_line.rs index 1718d2d6..626be039 100644 --- a/tests/color/strip_line.rs +++ b/tests/color/strip_line.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -18,7 +18,12 @@ fn case() { ), ), ]; - let expected = file!["strip_line.term.svg"]; + + let expected_ascii = file!["strip_line.ascii.term.svg": TermSvg]; let renderer = Renderer::styled().anonymized_line_numbers(true); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["strip_line.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/strip_line.unicode.term.svg b/tests/color/strip_line.unicode.term.svg new file mode 100644 index 00000000..2d536cf3 --- /dev/null +++ b/tests/color/strip_line.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error[E0308]: mismatched types + + ╭▸ $DIR/whitespace-trimming.rs:4:193 + + + + LL let _: () = 42; + + ╰╴ ━━ expected (), found integer + + + + diff --git a/tests/color/strip_line_char.term.svg b/tests/color/strip_line_char.ascii.term.svg similarity index 100% rename from tests/color/strip_line_char.term.svg rename to tests/color/strip_line_char.ascii.term.svg diff --git a/tests/color/strip_line_char.rs b/tests/color/strip_line_char.rs index b0c87767..08c61513 100644 --- a/tests/color/strip_line_char.rs +++ b/tests/color/strip_line_char.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -18,7 +18,12 @@ fn case() { ), ), ]; - let expected = file!["strip_line_char.term.svg"]; + + let expected_ascii = file!["strip_line_char.ascii.term.svg": TermSvg]; let renderer = Renderer::styled().anonymized_line_numbers(true); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["strip_line_char.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/strip_line_char.unicode.term.svg b/tests/color/strip_line_char.unicode.term.svg new file mode 100644 index 00000000..3519f037 --- /dev/null +++ b/tests/color/strip_line_char.unicode.term.svg @@ -0,0 +1,34 @@ + + + + + + + error[E0308]: mismatched types + + ╭▸ $DIR/whitespace-trimming.rs:4:193 + + + + LL let _: () = 42ñ + + ╰╴ ━━ expected (), found integer + + + + diff --git a/tests/color/strip_line_non_ws.term.svg b/tests/color/strip_line_non_ws.ascii.term.svg similarity index 100% rename from tests/color/strip_line_non_ws.term.svg rename to tests/color/strip_line_non_ws.ascii.term.svg diff --git a/tests/color/strip_line_non_ws.rs b/tests/color/strip_line_non_ws.rs index b9600bbc..a8d6aa79 100644 --- a/tests/color/strip_line_non_ws.rs +++ b/tests/color/strip_line_non_ws.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use snapbox::{assert_data_eq, file}; @@ -24,7 +24,12 @@ fn case() { ), ), ]; - let expected = file!["strip_line_non_ws.term.svg"]; + + let expected_ascii = file!["strip_line_non_ws.ascii.term.svg": TermSvg]; let renderer = Renderer::styled().anonymized_line_numbers(true); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["strip_line_non_ws.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/strip_line_non_ws.unicode.term.svg b/tests/color/strip_line_non_ws.unicode.term.svg new file mode 100644 index 00000000..977c6519 --- /dev/null +++ b/tests/color/strip_line_non_ws.unicode.term.svg @@ -0,0 +1,38 @@ + + + + + + + error[E0308]: mismatched types + + ╭▸ $DIR/non-whitespace-trimming.rs:4:233 + + + + LL () = (); let _: () = (); let _: () = (); let _: () = 42; let _: () = (); let _: () = (); let _: () = (); let _: () = (); let _: () = + + ┯━ ━━ expected `()`, found integer + + + + ╰╴ expected due to this + + + + diff --git a/tests/color/styled_title.term.svg b/tests/color/styled_title.ascii.term.svg similarity index 100% rename from tests/color/styled_title.term.svg rename to tests/color/styled_title.ascii.term.svg diff --git a/tests/color/styled_title.rs b/tests/color/styled_title.rs index caf554ec..ea28aae2 100644 --- a/tests/color/styled_title.rs +++ b/tests/color/styled_title.rs @@ -1,4 +1,4 @@ -use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet}; +use annotate_snippets::{renderer::DecorStyle, AnnotationKind, Group, Level, Renderer, Snippet}; use anstyle::{AnsiColor, Effects, Style}; use snapbox::{assert_data_eq, file}; @@ -37,7 +37,12 @@ use c::cnb_runtime; .annotation(AnnotationKind::Primary.span(31..32).label(label_4)), ), ]; - let expected = file!["styled_title.term.svg"]; + + let expected_ascii = file!["styled_title.ascii.term.svg": TermSvg]; let renderer = Renderer::styled(); - assert_data_eq!(renderer.render(input), expected); + assert_data_eq!(renderer.render(input), expected_ascii); + + let expected_unicode = file!["styled_title.unicode.term.svg": TermSvg]; + let renderer = renderer.decor_style(DecorStyle::Unicode); + assert_data_eq!(renderer.render(input), expected_unicode); } diff --git a/tests/color/styled_title.unicode.term.svg b/tests/color/styled_title.unicode.term.svg new file mode 100644 index 00000000..d2ebd9a7 --- /dev/null +++ b/tests/color/styled_title.unicode.term.svg @@ -0,0 +1,56 @@ + + + + + + + error[E0277]: the trait bound `CustomErrorHandler: ErrorHandler` is not satisfied + + ╭▸ src/main.rs:5:17 + + + + 5 cnb_runtime(CustomErrorHandler {}); + + ┬────────── ━━━━━━━━━━━━━━━━━━━━━ the trait `ErrorHandler` is not implemented for `CustomErrorHandler` + + + + required by a bound introduced by this call + + ╰╴ + + help: there are multiple different versions of crate `c` in the dependency graph + + ╭▸ src/main.rs:1:5 + + + + 1 use b::CustomErrorHandler; + + one version of crate `c` is used here, as a dependency of crate `b` + + 2 use c::cnb_runtime; + + ╰╴ one version of crate `c` is used here, as a direct dependency of the current crate + + + +