Skip to content

fix!: Clarify Snippet API #94

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Mar 12, 2024
19 changes: 13 additions & 6 deletions benches/simple.rs
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ extern crate criterion;

use criterion::{black_box, Criterion};

use annotate_snippets::{Label, Renderer, Slice, Snippet};
use annotate_snippets::{Level, Renderer, Snippet};

fn create_snippet(renderer: Renderer) {
let source = r#") -> Option<String> {
@@ -29,16 +29,23 @@ fn create_snippet(renderer: Renderer) {
_ => continue,
}
}"#;
let snippet = Snippet::error("mismatched types").id("E0308").slice(
Slice::new(source, 51)
let message = Level::Error.title("mismatched types").id("E0308").snippet(
Snippet::source(source)
.line_start(51)
.origin("src/format.rs")
.annotation(
Label::warning("expected `Option<String>` because of return type").span(5..19),
Level::Warning
.span(5..19)
.label("expected `Option<String>` because of return type"),
)
.annotation(Label::error("expected enum `std::option::Option`").span(26..724)),
.annotation(
Level::Error
.span(26..724)
.label("expected enum `std::option::Option`"),
),
);

let _result = renderer.render(snippet).to_string();
let _result = renderer.render(message).to_string();
}

pub fn criterion_benchmark(c: &mut Criterion) {
18 changes: 9 additions & 9 deletions examples/expected_type.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
use annotate_snippets::{Label, Renderer, Slice, Snippet};
use annotate_snippets::{Level, Renderer, Snippet};

fn main() {
let source = r#" annotations: vec![SourceAnnotation {
label: "expected struct `annotate_snippets::snippet::Slice`, found reference"
,
range: <22, 25>,"#;
let snippet = Snippet::error("expected type, found `22`").slice(
Slice::new(source, 26)
let message = Level::Error.title("expected type, found `22`").snippet(
Snippet::source(source)
.line_start(26)
.origin("examples/footer.rs")
.fold(true)
.annotation(
Label::error(
"expected struct `annotate_snippets::snippet::Slice`, found reference",
)
.span(193..195),
Level::Error
.span(193..195)
.label("expected struct `annotate_snippets::snippet::Slice`, found reference"),
)
.annotation(Label::info("while parsing this struct").span(34..50)),
.annotation(Level::Info.span(34..50).label("while parsing this struct")),
);

let renderer = Renderer::styled();
anstream::println!("{}", renderer.render(snippet));
anstream::println!("{}", renderer.render(message));
}
32 changes: 16 additions & 16 deletions examples/footer.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
use annotate_snippets::{Label, Renderer, Slice, Snippet};
use annotate_snippets::{Label, Level, Renderer, Snippet};

fn main() {
let snippet = Snippet::error("mismatched types")
.id("E0308")
.slice(
Slice::new(" slices: vec![\"A\",", 13)
.origin("src/multislice.rs")
.annotation(
Label::error(
let message =
Level::Error
.title("mismatched types")
.id("E0308")
.snippet(
Snippet::source(" slices: vec![\"A\",")
.line_start(13)
.origin("src/multislice.rs")
.annotation(Level::Error.span(21..24).label(
"expected struct `annotate_snippets::snippet::Slice`, found reference",
)
.span(21..24),
),
)
.footer(Label::note(
"expected type: `snippet::Annotation`\n found type: `__&__snippet::Annotation`",
));
)),
)
.footer(Label::note(
"expected type: `snippet::Annotation`\n found type: `__&__snippet::Annotation`",
));

let renderer = Renderer::styled();
anstream::println!("{}", renderer.render(snippet));
anstream::println!("{}", renderer.render(message));
}
19 changes: 13 additions & 6 deletions examples/format.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use annotate_snippets::{Label, Renderer, Slice, Snippet};
use annotate_snippets::{Level, Renderer, Snippet};

fn main() {
let source = r#") -> Option<String> {
@@ -23,15 +23,22 @@ fn main() {
_ => continue,
}
}"#;
let snippet = Snippet::error("mismatched types").id("E0308").slice(
Slice::new(source, 51)
let message = Level::Error.title("mismatched types").id("E0308").snippet(
Snippet::source(source)
.line_start(51)
.origin("src/format.rs")
.annotation(
Label::warning("expected `Option<String>` because of return type").span(5..19),
Level::Warning
.span(5..19)
.label("expected `Option<String>` because of return type"),
)
.annotation(Label::error("expected enum `std::option::Option`").span(26..724)),
.annotation(
Level::Error
.span(26..724)
.label("expected enum `std::option::Option`"),
),
);

let renderer = Renderer::styled();
anstream::println!("{}", renderer.render(snippet));
anstream::println!("{}", renderer.render(message));
}
19 changes: 14 additions & 5 deletions examples/multislice.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
use annotate_snippets::{Renderer, Slice, Snippet};
use annotate_snippets::{Level, Renderer, Snippet};

fn main() {
let snippet = Snippet::error("mismatched types")
.slice(Slice::new("Foo", 51).origin("src/format.rs"))
.slice(Slice::new("Faa", 129).origin("src/display.rs"));
let message = Level::Error
.title("mismatched types")
.snippet(
Snippet::source("Foo")
.line_start(51)
.origin("src/format.rs"),
)
.snippet(
Snippet::source("Faa")
.line_start(129)
.origin("src/display.rs"),
);

let renderer = Renderer::styled();
anstream::println!("{}", renderer.render(snippet));
anstream::println!("{}", renderer.render(message));
}
4 changes: 2 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -16,10 +16,10 @@
//! The crate uses a three stage process with two conversions between states:
//!
//! ```text
//! Snippet --> Renderer --> impl Display
//! Message --> Renderer --> impl Display
//! ```
//!
//! The input type - [Snippet] is a structure designed
//! The input type - [Message] is a structure designed
//! to align with likely output from any parser whose code snippet is to be
//! annotated.
//!
Loading