-
Notifications
You must be signed in to change notification settings - Fork 45
Closed
@yoshuawuyts
Description
I was messing around with the basic example, and found some interesting behavior (that doesn't seem to be quite right. Below is the source code + output for a few cases.
update: as I was going through this it seems that there is a clear bug for this. If we start the annotation at either 0 or 1 it offsets. At range 2 it's before the line. But at range 3 it actually pops back to the right location (I think, I'm unsure because of /
, but that might just be the right behavior)! Check out cases 4 and 5 for what's going on.
Either way, I hope this report is helpful. Excited this crate exists!
Case 1
Output
error: expected type, found `22` --> examples/example.txt:27:11 | 26 | | __- | __- 27 | This is an example content of the slice which will be annotated with the list of annotations below. | | ^^^^^ Example error annotation | ||___________________________________________________________- and here's a warning | |_______________________________________- and here's a warning 28 | |
Code
use annotate_snippets::display_list::DisplayList; use annotate_snippets::formatter::DisplayListFormatter; use annotate_snippets::snippet::{Annotation, AnnotationType, Slice, Snippet, SourceAnnotation}; fn main() { let snippet = Snippet { title: Some(Annotation { label: Some("expected type, found `22`".to_string()), id: None, annotation_type: AnnotationType::Error, }), footer: vec![], slices: vec![Slice { source: r#" This is an example content of the slice which will be annotated with the list of annotations below. "# .to_string(), line_start: 26, origin: Some("examples/example.txt".to_string()), fold: false, annotations: vec![ SourceAnnotation { label: "Example error annotation".to_string(), annotation_type: AnnotationType::Error, range: (13, 18), }, SourceAnnotation { label: "and here's a warning".to_string(), annotation_type: AnnotationType::Warning, range: (1, 60), }, SourceAnnotation { label: "and here's a warning".to_string(), annotation_type: AnnotationType::Warning, range: (1, 40), }, ], }], }; let dl = DisplayList::from(snippet); let dlf = DisplayListFormatter::new(true, false); println!("{}", dlf.format(&dl)); }
Case 2
Output
error: expected type, found `22` --> examples/example.txt:27:11 | 26 | | __- 27 | This is an example content of the slice which will be annotated with the list of annotations below. | | ^^^^^ Example error annotation | |___________________________________________________________- and here's a warning 28 | |
Code
use annotate_snippets::display_list::DisplayList; use annotate_snippets::formatter::DisplayListFormatter; use annotate_snippets::snippet::{Annotation, AnnotationType, Slice, Snippet, SourceAnnotation}; fn main() { let snippet = Snippet { title: Some(Annotation { label: Some("expected type, found `22`".to_string()), id: None, annotation_type: AnnotationType::Error, }), footer: vec![], slices: vec![Slice { source: r#" This is an example content of the slice which will be annotated with the list of annotations below. "# .to_string(), line_start: 26, origin: Some("examples/example.txt".to_string()), fold: false, annotations: vec![ SourceAnnotation { label: "Example error annotation".to_string(), annotation_type: AnnotationType::Error, range: (13, 18), }, SourceAnnotation { label: "and here's a warning".to_string(), annotation_type: AnnotationType::Warning, range: (1, 60), }, ], }], }; let dl = DisplayList::from(snippet); let dlf = DisplayListFormatter::new(true, false); println!("{}", dlf.format(&dl)); }
Case 3
Output
error: expected type, found `22` --> examples/example.txt:26:1 | 26 | | __- 27 | | This is an example content of the slice which will be annotated with the list of annotations below. | |___________________________________________________________- and here's a warning 28 | |
Code
use annotate_snippets::display_list::DisplayList; use annotate_snippets::formatter::DisplayListFormatter; use annotate_snippets::snippet::{Annotation, AnnotationType, Slice, Snippet, SourceAnnotation}; fn main() { let snippet = Snippet { title: Some(Annotation { label: Some("expected type, found `22`".to_string()), id: None, annotation_type: AnnotationType::Error, }), footer: vec![], slices: vec![Slice { source: r#" This is an example content of the slice which will be annotated with the list of annotations below. "# .to_string(), line_start: 26, origin: Some("examples/example.txt".to_string()), fold: false, annotations: vec![SourceAnnotation { label: "and here's a warning".to_string(), annotation_type: AnnotationType::Warning, range: (1, 60), }], }], }; let dl = DisplayList::from(snippet); let dlf = DisplayListFormatter::new(true, false); println!("{}", dlf.format(&dl)); }
Case 4
The range now starts at index 2.
Output
error: expected type, found `22` --> examples/example.txt:27:0 | 26 | 27 | / This is an example content of the slice which will be 28 | | annotated with the list of annotations below. | |____- and here's a warning 29 | |
Code
use annotate_snippets::display_list::DisplayList; use annotate_snippets::formatter::DisplayListFormatter; use annotate_snippets::snippet::{Annotation, AnnotationType, Slice, Snippet, SourceAnnotation}; fn main() { let snippet = Snippet { title: Some(Annotation { label: Some("expected type, found `22`".to_string()), id: None, annotation_type: AnnotationType::Error, }), footer: vec![], slices: vec![Slice { source: r#" This is an example content of the slice which will be annotated with the list of annotations below. "# .to_string(), line_start: 26, origin: Some("examples/example.txt".to_string()), fold: false, annotations: vec![SourceAnnotation { label: "and here's a warning".to_string(), annotation_type: AnnotationType::Warning, range: (2, 60), }], }], }; let dl = DisplayList::from(snippet); let dlf = DisplayListFormatter::new(true, false); println!("{}", dlf.format(&dl)); }
Case 5
The range now starts at index 3.
Output
error: expected type, found `22` --> examples/example.txt:27:1 | 26 | 27 | This is an example content of the slice which will be | __- 28 | | annotated with the list of annotations below. | |____- and here's a warning 29 | |
Code
use annotate_snippets::display_list::DisplayList; use annotate_snippets::formatter::DisplayListFormatter; use annotate_snippets::snippet::{Annotation, AnnotationType, Slice, Snippet, SourceAnnotation}; fn main() { let snippet = Snippet { title: Some(Annotation { label: Some("expected type, found `22`".to_string()), id: None, annotation_type: AnnotationType::Error, }), footer: vec![], slices: vec![Slice { source: r#" This is an example content of the slice which will be annotated with the list of annotations below. "# .to_string(), line_start: 26, origin: Some("examples/example.txt".to_string()), fold: false, annotations: vec![SourceAnnotation { label: "and here's a warning".to_string(), annotation_type: AnnotationType::Warning, range: (3, 60), }], }], }; let dl = DisplayList::from(snippet); let dlf = DisplayListFormatter::new(true, false); println!("{}", dlf.format(&dl)); }