Skip to content

Commit 68342cc

Browse files
authored
Merge pull request #195 from Muscraft/new-api
New api
2 parents 5e302a9 + 353a040 commit 68342cc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+7791
-2744
lines changed

Diff for: Cargo.lock

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: benches/bench.rs

+30-26
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use annotate_snippets::{Level, Renderer, Snippet};
1+
use annotate_snippets::{level::Level, AnnotationKind, Group, Renderer, Snippet};
22

33
#[divan::bench]
44
fn simple() -> String {
@@ -24,24 +24,26 @@ fn simple() -> String {
2424
_ => continue,
2525
}
2626
}"#;
27-
let message = Level::Error.title("mismatched types").id("E0308").snippet(
28-
Snippet::source(source)
29-
.line_start(51)
30-
.origin("src/format.rs")
31-
.annotation(
32-
Level::Warning
33-
.span(5..19)
34-
.label("expected `Option<String>` because of return type"),
35-
)
36-
.annotation(
37-
Level::Error
38-
.span(26..724)
39-
.label("expected enum `std::option::Option`"),
40-
),
27+
let message = Level::ERROR.message("mismatched types").id("E0308").group(
28+
Group::new().element(
29+
Snippet::source(source)
30+
.line_start(51)
31+
.origin("src/format.rs")
32+
.annotation(
33+
AnnotationKind::Context
34+
.span(5..19)
35+
.label("expected `Option<String>` because of return type"),
36+
)
37+
.annotation(
38+
AnnotationKind::Primary
39+
.span(26..724)
40+
.label("expected enum `std::option::Option`"),
41+
),
42+
),
4143
);
4244

4345
let renderer = Renderer::plain();
44-
let rendered = renderer.render(message).to_string();
46+
let rendered = renderer.render(message);
4547
rendered
4648
}
4749

@@ -67,19 +69,21 @@ fn fold(bencher: divan::Bencher<'_, '_>, context: usize) {
6769
(input, span)
6870
})
6971
.bench_values(|(input, span)| {
70-
let message = Level::Error.title("mismatched types").id("E0308").snippet(
71-
Snippet::source(&input)
72-
.fold(true)
73-
.origin("src/format.rs")
74-
.annotation(
75-
Level::Warning
76-
.span(span)
77-
.label("expected `Option<String>` because of return type"),
78-
),
72+
let message = Level::ERROR.message("mismatched types").id("E0308").group(
73+
Group::new().element(
74+
Snippet::source(&input)
75+
.fold(true)
76+
.origin("src/format.rs")
77+
.annotation(
78+
AnnotationKind::Context
79+
.span(span)
80+
.label("expected `Option<String>` because of return type"),
81+
),
82+
),
7983
);
8084

8185
let renderer = Renderer::plain();
82-
let rendered = renderer.render(message).to_string();
86+
let rendered = renderer.render(message);
8387
rendered
8488
});
8589
}

Diff for: examples/custom_error.rs

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
use annotate_snippets::renderer::OutputTheme;
2+
use annotate_snippets::{level::Level, AnnotationKind, Group, Renderer, Snippet};
3+
4+
fn main() {
5+
let source = r#"//@ compile-flags: -Ztreat-err-as-bug
6+
//@ failure-status: 101
7+
//@ error-pattern: aborting due to `-Z treat-err-as-bug=1`
8+
//@ error-pattern: [eval_static_initializer] evaluating initializer of static `C`
9+
//@ normalize-stderr: "note: .*\n\n" -> ""
10+
//@ normalize-stderr: "thread 'rustc' panicked.*:\n.*\n" -> ""
11+
//@ rustc-env:RUST_BACKTRACE=0
12+
13+
#![crate_type = "rlib"]
14+
15+
pub static C: u32 = 0 - 1;
16+
//~^ ERROR could not evaluate static initializer
17+
"#;
18+
let message = Level::ERROR
19+
.text(Some("error: internal compiler error"))
20+
.message("could not evaluate static initializer")
21+
.id("E0080")
22+
.group(
23+
Group::new().element(
24+
Snippet::source(source)
25+
.origin("$DIR/err.rs")
26+
.fold(true)
27+
.annotation(
28+
AnnotationKind::Primary
29+
.span(386..391)
30+
.label("attempt to compute `0_u32 - 1_u32`, which would overflow"),
31+
),
32+
),
33+
);
34+
35+
let renderer = Renderer::styled().theme(OutputTheme::Unicode);
36+
anstream::println!("{}", renderer.render(message));
37+
}

Diff for: examples/custom_error.svg

+36
Loading

Diff for: examples/custom_level.rs

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
use annotate_snippets::renderer::OutputTheme;
2+
use annotate_snippets::{level::Level, AnnotationKind, Group, Patch, Renderer, Snippet};
3+
4+
fn main() {
5+
let source = r#"// Regression test for issue #114529
6+
// Tests that we do not ICE during const eval for a
7+
// break-with-value in contexts where it is illegal
8+
9+
#[allow(while_true)]
10+
fn main() {
11+
[(); {
12+
while true {
13+
break 9; //~ ERROR `break` with value from a `while` loop
14+
};
15+
51
16+
}];
17+
18+
[(); {
19+
while let Some(v) = Some(9) {
20+
break v; //~ ERROR `break` with value from a `while` loop
21+
};
22+
51
23+
}];
24+
25+
while true {
26+
break (|| { //~ ERROR `break` with value from a `while` loop
27+
let local = 9;
28+
});
29+
}
30+
}
31+
"#;
32+
let message = Level::ERROR
33+
.message("`break` with value from a `while` loop")
34+
.id("E0571")
35+
.group(
36+
Group::new().element(
37+
Snippet::source(source)
38+
.line_start(1)
39+
.origin("$DIR/issue-114529-illegal-break-with-value.rs")
40+
.fold(true)
41+
.annotation(
42+
AnnotationKind::Primary
43+
.span(483..581)
44+
.label("can only break with a value inside `loop` or breakable block"),
45+
)
46+
.annotation(
47+
AnnotationKind::Context
48+
.span(462..472)
49+
.label("you can't `break` with a value in a `while` loop"),
50+
),
51+
),
52+
)
53+
.group(
54+
Group::new()
55+
.element(
56+
Level::HELP
57+
.text(Some("suggestion"))
58+
.title("use `break` on its own without a value inside this `while` loop"),
59+
)
60+
.element(
61+
Snippet::source(source)
62+
.line_start(1)
63+
.origin("$DIR/issue-114529-illegal-break-with-value.rs")
64+
.fold(true)
65+
.patch(Patch::new(483..581, "break")),
66+
),
67+
);
68+
69+
let renderer = Renderer::styled().theme(OutputTheme::Unicode);
70+
anstream::println!("{}", renderer.render(message));
71+
}

Diff for: examples/custom_level.svg

+62
Loading

Diff for: examples/expected_type.rs

+18-13
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
1-
use annotate_snippets::{Level, Renderer, Snippet};
1+
use annotate_snippets::{level::Level, AnnotationKind, Group, Renderer, Snippet};
22

33
fn main() {
44
let source = r#" annotations: vec![SourceAnnotation {
55
label: "expected struct `annotate_snippets::snippet::Slice`, found reference"
66
,
77
range: <22, 25>,"#;
8-
let message = Level::Error.title("expected type, found `22`").snippet(
9-
Snippet::source(source)
10-
.line_start(26)
11-
.origin("examples/footer.rs")
12-
.fold(true)
13-
.annotation(
14-
Level::Error
15-
.span(193..195)
16-
.label("expected struct `annotate_snippets::snippet::Slice`, found reference"),
17-
)
18-
.annotation(Level::Info.span(34..50).label("while parsing this struct")),
19-
);
8+
let message =
9+
Level::ERROR.message("expected type, found `22`").group(
10+
Group::new().element(
11+
Snippet::source(source)
12+
.line_start(26)
13+
.origin("examples/footer.rs")
14+
.fold(true)
15+
.annotation(AnnotationKind::Primary.span(193..195).label(
16+
"expected struct `annotate_snippets::snippet::Slice`, found reference",
17+
))
18+
.annotation(
19+
AnnotationKind::Context
20+
.span(34..50)
21+
.label("while parsing this struct"),
22+
),
23+
),
24+
);
2025

2126
let renderer = Renderer::styled();
2227
anstream::println!("{}", renderer.render(message));

Diff for: examples/expected_type.svg

+9-11
Loading

0 commit comments

Comments
 (0)