Skip to content

Commit a78e165

Browse files
authored
Merge pull request #198 from epage/fixes
fix!: Iterate on the API
2 parents 68342cc + 66369fe commit a78e165

35 files changed

+278
-197
lines changed

Diff for: benches/bench.rs

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

33
#[divan::bench]
44
fn simple() -> String {
@@ -24,7 +24,7 @@ fn simple() -> String {
2424
_ => continue,
2525
}
2626
}"#;
27-
let message = Level::ERROR.message("mismatched types").id("E0308").group(
27+
let message = Level::ERROR.header("mismatched types").id("E0308").group(
2828
Group::new().element(
2929
Snippet::source(source)
3030
.line_start(51)
@@ -69,7 +69,7 @@ fn fold(bencher: divan::Bencher<'_, '_>, context: usize) {
6969
(input, span)
7070
})
7171
.bench_values(|(input, span)| {
72-
let message = Level::ERROR.message("mismatched types").id("E0308").group(
72+
let message = Level::ERROR.header("mismatched types").id("E0308").group(
7373
Group::new().element(
7474
Snippet::source(&input)
7575
.fold(true)

Diff for: examples/custom_error.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use annotate_snippets::renderer::OutputTheme;
2-
use annotate_snippets::{level::Level, AnnotationKind, Group, Renderer, Snippet};
2+
use annotate_snippets::{AnnotationKind, Group, Level, Renderer, Snippet};
33

44
fn main() {
55
let source = r#"//@ compile-flags: -Ztreat-err-as-bug
@@ -17,7 +17,7 @@ pub static C: u32 = 0 - 1;
1717
"#;
1818
let message = Level::ERROR
1919
.text(Some("error: internal compiler error"))
20-
.message("could not evaluate static initializer")
20+
.header("could not evaluate static initializer")
2121
.id("E0080")
2222
.group(
2323
Group::new().element(

Diff for: examples/custom_level.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use annotate_snippets::renderer::OutputTheme;
2-
use annotate_snippets::{level::Level, AnnotationKind, Group, Patch, Renderer, Snippet};
2+
use annotate_snippets::{AnnotationKind, Group, Level, Patch, Renderer, Snippet};
33

44
fn main() {
55
let source = r#"// Regression test for issue #114529
@@ -30,7 +30,7 @@ fn main() {
3030
}
3131
"#;
3232
let message = Level::ERROR
33-
.message("`break` with value from a `while` loop")
33+
.header("`break` with value from a `while` loop")
3434
.id("E0571")
3535
.group(
3636
Group::new().element(

Diff for: examples/expected_type.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
use annotate_snippets::{level::Level, AnnotationKind, Group, Renderer, Snippet};
1+
use annotate_snippets::{AnnotationKind, Group, Level, 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>,"#;
88
let message =
9-
Level::ERROR.message("expected type, found `22`").group(
9+
Level::ERROR.header("expected type, found `22`").group(
1010
Group::new().element(
1111
Snippet::source(source)
1212
.line_start(26)

Diff for: examples/footer.rs

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

33
fn main() {
44
let message = Level::ERROR
5-
.message("mismatched types")
5+
.header("mismatched types")
66
.id("E0308")
77
.group(
88
Group::new().element(

Diff for: examples/format.rs

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

33
fn main() {
44
let source = r#") -> Option<String> {
@@ -23,7 +23,7 @@ fn main() {
2323
_ => continue,
2424
}
2525
}"#;
26-
let message = Level::ERROR.message("mismatched types").id("E0308").group(
26+
let message = Level::ERROR.header("mismatched types").id("E0308").group(
2727
Group::new().element(
2828
Snippet::source(source)
2929
.line_start(51)

Diff for: examples/highlight_source.rs

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

33
fn main() {
44
let source = r#"//@ compile-flags: -Z teach
@@ -10,7 +10,7 @@ const CON: Vec<i32> = vec![1, 2, 3]; //~ ERROR E0010
1010
fn main() {}
1111
"#;
1212
let message = Level::ERROR
13-
.message("allocations are not allowed in constants")
13+
.header("allocations are not allowed in constants")
1414
.id("E0010")
1515
.group(
1616
Group::new()

Diff for: examples/highlight_title.rs

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

44
fn main() {
@@ -43,7 +43,7 @@ fn main() {
4343
magenta.render_reset()
4444
);
4545

46-
let message = Level::ERROR.message("mismatched types").id("E0308").group(
46+
let message = Level::ERROR.header("mismatched types").id("E0308").group(
4747
Group::new()
4848
.element(
4949
Snippet::source(source)

Diff for: examples/multislice.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
use annotate_snippets::{level::Level, Annotation, Group, Renderer, Snippet};
1+
use annotate_snippets::{Annotation, Group, Level, Renderer, Snippet};
22

33
fn main() {
4-
let message = Level::ERROR.message("mismatched types").group(
4+
let message = Level::ERROR.header("mismatched types").group(
55
Group::new()
66
.element(
77
Snippet::<Annotation<'_>>::source("Foo")

Diff for: src/level.rs

+23-13
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,61 @@
1+
//! [`Level`] constants for easy importing
2+
13
use crate::renderer::stylesheet::Stylesheet;
24
use crate::snippet::{ERROR_TXT, HELP_TXT, INFO_TXT, NOTE_TXT, WARNING_TXT};
35
use crate::{Element, Group, Message, Title};
46
use anstyle::Style;
57

8+
/// Default `error:` [`Level`]
69
pub const ERROR: Level<'_> = Level {
710
name: None,
811
level: LevelInner::Error,
912
};
1013

14+
/// Default `warning:` [`Level`]
1115
pub const WARNING: Level<'_> = Level {
1216
name: None,
1317
level: LevelInner::Warning,
1418
};
1519

20+
/// Default `info:` [`Level`]
1621
pub const INFO: Level<'_> = Level {
1722
name: None,
1823
level: LevelInner::Info,
1924
};
2025

26+
/// Default `note:` [`Level`]
2127
pub const NOTE: Level<'_> = Level {
2228
name: None,
2329
level: LevelInner::Note,
2430
};
2531

32+
/// Default `help:` [`Level`]
2633
pub const HELP: Level<'_> = Level {
2734
name: None,
2835
level: LevelInner::Help,
2936
};
3037

38+
/// [`Message`] or [`Title`] severity level
3139
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
3240
pub struct Level<'a> {
3341
pub(crate) name: Option<Option<&'a str>>,
3442
pub(crate) level: LevelInner,
3543
}
3644

37-
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
38-
pub enum Level2<'a> {
39-
Builtin(LevelInner),
40-
Custom {
41-
name: Option<&'a str>,
42-
level: LevelInner,
43-
},
44-
None,
45-
}
46-
4745
impl<'a> Level<'a> {
4846
pub const ERROR: Level<'a> = ERROR;
4947
pub const WARNING: Level<'a> = WARNING;
5048
pub const INFO: Level<'a> = INFO;
5149
pub const NOTE: Level<'a> = NOTE;
5250
pub const HELP: Level<'a> = HELP;
5351

52+
/// <div class="warning">
53+
///
5454
/// Text passed to this function is considered "untrusted input", as such
5555
/// all text is passed through a normalization function. Pre-styled text is
5656
/// not allowed to be passed to this function.
57+
///
58+
/// </div>
5759
pub fn text(self, text: Option<&'a str>) -> Level<'a> {
5860
Level {
5961
name: Some(text),
@@ -63,24 +65,32 @@ impl<'a> Level<'a> {
6365
}
6466

6567
impl<'a> Level<'a> {
68+
/// <div class="warning">
69+
///
6670
/// Text passed to this function is considered "untrusted input", as such
6771
/// all text is passed through a normalization function. Pre-styled text is
6872
/// not allowed to be passed to this function.
69-
pub fn message(self, title: &'a str) -> Message<'a> {
73+
///
74+
/// </div>
75+
pub fn header(self, header: &'a str) -> Message<'a> {
7076
Message {
7177
id: None,
7278
groups: vec![Group::new().element(Element::Title(Title {
7379
level: self,
74-
title,
80+
title: header,
7581
primary: true,
7682
}))],
7783
}
7884
}
7985

86+
/// <div class="warning">
87+
///
8088
/// Text passed to this function is allowed to be pre-styled, as such all
8189
/// text is considered "trusted input" and has no normalizations applied to
8290
/// it. [`normalize_untrusted_str`](crate::normalize_untrusted_str) can be
8391
/// used to normalize untrusted text before it is passed to this function.
92+
///
93+
/// </div>
8494
pub fn title(self, title: &'a str) -> Title<'a> {
8595
Title {
8696
level: self,
@@ -107,7 +117,7 @@ impl<'a> Level<'a> {
107117
}
108118

109119
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
110-
pub enum LevelInner {
120+
pub(crate) enum LevelInner {
111121
Error,
112122
Warning,
113123
Info,

Diff for: src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ pub fn normalize_untrusted_str(s: &str) -> String {
5353
renderer::normalize_whitespace(s)
5454
}
5555

56+
#[doc(inline)]
57+
pub use level::Level;
5658
#[doc(inline)]
5759
pub use renderer::Renderer;
58-
pub use snippet::ColumnSeparator;
5960
pub use snippet::*;

Diff for: src/renderer/mod.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! # Example
66
//! ```
77
//! use annotate_snippets::*;
8-
//! use annotate_snippets::level::Level;
8+
//! use annotate_snippets::Level;
99
//!
1010
//! let source = r#"
1111
//! use baz::zed::bar;
@@ -19,7 +19,7 @@
1919
//! }
2020
//! "#;
2121
//! Level::ERROR
22-
//! .message("unresolved import `baz::zed`")
22+
//! .header("unresolved import `baz::zed`")
2323
//! .id("E0432")
2424
//! .group(
2525
//! Group::new().element(
@@ -101,7 +101,7 @@ impl Renderer {
101101
info: BRIGHT_BLUE.effects(Effects::BOLD),
102102
note: AnsiColor::BrightGreen.on_default().effects(Effects::BOLD),
103103
help: AnsiColor::BrightCyan.on_default().effects(Effects::BOLD),
104-
line_no: BRIGHT_BLUE.effects(Effects::BOLD),
104+
line_num: BRIGHT_BLUE.effects(Effects::BOLD),
105105
emphasis: if USE_WINDOWS_COLORS {
106106
AnsiColor::BrightWhite.on_default()
107107
} else {
@@ -178,8 +178,8 @@ impl Renderer {
178178
}
179179

180180
/// Set the output style for line numbers
181-
pub const fn line_no(mut self, style: Style) -> Self {
182-
self.stylesheet.line_no = style;
181+
pub const fn line_num(mut self, style: Style) -> Self {
182+
self.stylesheet.line_num = style;
183183
self
184184
}
185185

@@ -383,7 +383,7 @@ impl Renderer {
383383
self.render_origin(buffer, max_line_num_len, origin);
384384
last_was_suggestion = false;
385385
}
386-
Element::ColumnSeparator(_) => {
386+
Element::Padding(_) => {
387387
self.draw_col_separator_no_space(
388388
buffer,
389389
buffer.num_lines(),
@@ -430,7 +430,7 @@ impl Renderer {
430430

431431
let (has_primary_spans, has_span_labels) =
432432
next_section.map_or((false, false), |s| match s {
433-
Element::Title(_) | Element::ColumnSeparator(_) => (false, false),
433+
Element::Title(_) | Element::Padding(_) => (false, false),
434434
Element::Cause(cause) => (
435435
cause.markers.iter().any(|m| m.kind.is_primary()),
436436
cause.markers.iter().any(|m| m.label.is_some()),
@@ -1523,7 +1523,7 @@ impl Renderer {
15231523
}
15241524
if suggestion.origin != primary_origin {
15251525
if let Some(origin) = suggestion.origin {
1526-
let (loc, _) = sm.span_to_locations(parts[0].range.clone());
1526+
let (loc, _) = sm.span_to_locations(parts[0].span.clone());
15271527
// --> file.rs:line:col
15281528
// |
15291529
let arrow = self.file_start();
@@ -1563,8 +1563,8 @@ impl Renderer {
15631563
row_num += 1;
15641564
}
15651565

1566-
let file_lines = sm.span_to_lines(parts[0].range.clone());
1567-
let (line_start, line_end) = sm.span_to_locations(parts[0].range.clone());
1566+
let file_lines = sm.span_to_lines(parts[0].span.clone());
1567+
let (line_start, line_end) = sm.span_to_locations(parts[0].span.clone());
15681568
let mut lines = complete.lines();
15691569
if lines.clone().next().is_none() {
15701570
// Account for a suggestion to completely remove a line(s) with whitespace (#94192).
@@ -1697,8 +1697,8 @@ impl Renderer {
16971697
// already existing code, despite the colors and UI elements.
16981698
// We special case `#[derive(_)]\n` and other attribute suggestions, because those
16991699
// are the ones where context is most useful.
1700-
let file_lines = sm.span_to_lines(parts[0].range.end..parts[0].range.end);
1701-
let (lo, _) = sm.span_to_locations(parts[0].range.clone());
1700+
let file_lines = sm.span_to_lines(parts[0].span.end..parts[0].span.end);
1701+
let (lo, _) = sm.span_to_locations(parts[0].span.clone());
17021702
let line_num = lo.line;
17031703
if let Some(line) = sm.get_line(line_num) {
17041704
let line = normalize_whitespace(line);
@@ -1724,7 +1724,7 @@ impl Renderer {
17241724
show_code_change
17251725
{
17261726
for part in parts {
1727-
let (span_start, span_end) = sm.span_to_locations(part.range.clone());
1727+
let (span_start, span_end) = sm.span_to_locations(part.span.clone());
17281728
let span_start_pos = span_start.display;
17291729
let span_end_pos = span_end.display;
17301730

@@ -1764,7 +1764,7 @@ impl Renderer {
17641764
let padding: usize = max_line_num_len + 3;
17651765
for p in underline_start..underline_end {
17661766
if matches!(show_code_change, DisplaySuggestion::Underline)
1767-
&& is_different(sm, part.replacement, part.range.clone())
1767+
&& is_different(sm, part.replacement, part.span.clone())
17681768
{
17691769
// If this is a replacement, underline with `~`, if this is an addition
17701770
// underline with `+`.
@@ -2665,7 +2665,7 @@ impl ElementStyle {
26652665
ElementStyle::Addition => stylesheet.addition,
26662666
ElementStyle::Removal => stylesheet.removal,
26672667
ElementStyle::LineAndColumn => stylesheet.none,
2668-
ElementStyle::LineNumber => stylesheet.line_no,
2668+
ElementStyle::LineNumber => stylesheet.line_num,
26692669
ElementStyle::Quotation => stylesheet.none,
26702670
ElementStyle::MainHeaderMsg => stylesheet.emphasis,
26712671
ElementStyle::UnderlinePrimary | ElementStyle::LabelPrimary => level.style(stylesheet),

0 commit comments

Comments
 (0)