Struct ariadne::ReportBuilder

source ·
pub struct ReportBuilder<'a, S: Span> { /* private fields */ }
Expand description

A type used to build a Report.

Implementations§

source§

impl<'a, S: Span> ReportBuilder<'a, S>

source

pub fn with_code<C: Display>(self, code: C) -> Self

Give this report a numerical code that may be used to more precisely look up the error in documentation.

Examples found in repository?
examples/multifile.rs (line 12)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let c = colors.next();

    Report::build(ReportKind::Error, "b.tao", 10)
        .with_code(3)
        .with_message(format!("Cannot add types Nat and Str"))
        .with_label(Label::new(("b.tao", 10..14))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("b.tao", 17..20))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("b.tao", 15..16))
            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
            .with_color(c)
            .with_order(10))
        .with_label(Label::new(("a.tao", 4..8))
            .with_message(format!("Original definition of {} is here", "five".fg(a)))
            .with_color(a))
        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
        .finish()
        .print(sources(vec![
            ("a.tao", include_str!("a.tao")),
            ("b.tao", include_str!("b.tao")),
        ]))
        .unwrap();
}
More examples
Hide additional examples
examples/multiline.rs (line 13)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate & choose some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let out = Color::Fixed(81);
    let out2= colors.next();

    Report::build(ReportKind::Error, "sample.tao", 12)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("sample.tao", 32..33))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("sample.tao", 42..45))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("sample.tao", 11..48))
            .with_message(format!(
                "The values are outputs of this {} expression",
                "match".fg(out),
            ))
            .with_color(out))
        .with_label(Label::new(("sample.tao", 0..48))
            .with_message(format!(
                "The {} has a problem",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_label(Label::new(("sample.tao", 50..76))
            .with_message(format!(
                "Usage of {} here",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
        .finish()
        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
        .unwrap();
}
examples/stresstest.rs (line 7)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
fn main() {
    let mut colors = ColorGenerator::new();

    Report::build(ReportKind::Error, "stresstest.tao", 13)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))

        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
        .with_config(Config::default()
            .with_cross_gap(false)
            .with_compact(true)
            .with_underlines(true)
            .with_tab_width(4))
        .finish()
        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
        .unwrap();
}
source

pub fn set_message<M: ToString>(&mut self, msg: M)

Set the message of this report.

source

pub fn with_message<M: ToString>(self, msg: M) -> Self

Add a message to this report.

Examples found in repository?
examples/simple.rs (line 5)
3
4
5
6
7
8
9
10
11
fn main() {
    Report::build(ReportKind::Error, (), 34)
        .with_message("Incompatible types")
        .with_label(Label::new(32..33).with_message("This is of type Nat"))
        .with_label(Label::new(42..45).with_message("This is of type Str"))
        .finish()
        .print(Source::from(include_str!("sample.tao")))
        .unwrap();
}
More examples
Hide additional examples
examples/multifile.rs (line 13)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let c = colors.next();

    Report::build(ReportKind::Error, "b.tao", 10)
        .with_code(3)
        .with_message(format!("Cannot add types Nat and Str"))
        .with_label(Label::new(("b.tao", 10..14))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("b.tao", 17..20))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("b.tao", 15..16))
            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
            .with_color(c)
            .with_order(10))
        .with_label(Label::new(("a.tao", 4..8))
            .with_message(format!("Original definition of {} is here", "five".fg(a)))
            .with_color(a))
        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
        .finish()
        .print(sources(vec![
            ("a.tao", include_str!("a.tao")),
            ("b.tao", include_str!("b.tao")),
        ]))
        .unwrap();
}
examples/multiline.rs (line 14)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate & choose some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let out = Color::Fixed(81);
    let out2= colors.next();

    Report::build(ReportKind::Error, "sample.tao", 12)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("sample.tao", 32..33))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("sample.tao", 42..45))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("sample.tao", 11..48))
            .with_message(format!(
                "The values are outputs of this {} expression",
                "match".fg(out),
            ))
            .with_color(out))
        .with_label(Label::new(("sample.tao", 0..48))
            .with_message(format!(
                "The {} has a problem",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_label(Label::new(("sample.tao", 50..76))
            .with_message(format!(
                "Usage of {} here",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
        .finish()
        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
        .unwrap();
}
examples/stresstest.rs (line 8)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
fn main() {
    let mut colors = ColorGenerator::new();

    Report::build(ReportKind::Error, "stresstest.tao", 13)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))

        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
        .with_config(Config::default()
            .with_cross_gap(false)
            .with_compact(true)
            .with_underlines(true)
            .with_tab_width(4))
        .finish()
        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
        .unwrap();
}
source

pub fn set_note<N: ToString>(&mut self, note: N)

Set the note of this report.

source

pub fn with_note<N: ToString>(self, note: N) -> Self

Set the note of this report.

Examples found in repository?
examples/multifile.rs (line 27)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let c = colors.next();

    Report::build(ReportKind::Error, "b.tao", 10)
        .with_code(3)
        .with_message(format!("Cannot add types Nat and Str"))
        .with_label(Label::new(("b.tao", 10..14))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("b.tao", 17..20))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("b.tao", 15..16))
            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
            .with_color(c)
            .with_order(10))
        .with_label(Label::new(("a.tao", 4..8))
            .with_message(format!("Original definition of {} is here", "five".fg(a)))
            .with_color(a))
        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
        .finish()
        .print(sources(vec![
            ("a.tao", include_str!("a.tao")),
            ("b.tao", include_str!("b.tao")),
        ]))
        .unwrap();
}
More examples
Hide additional examples
examples/multiline.rs (line 39)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate & choose some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let out = Color::Fixed(81);
    let out2= colors.next();

    Report::build(ReportKind::Error, "sample.tao", 12)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("sample.tao", 32..33))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("sample.tao", 42..45))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("sample.tao", 11..48))
            .with_message(format!(
                "The values are outputs of this {} expression",
                "match".fg(out),
            ))
            .with_color(out))
        .with_label(Label::new(("sample.tao", 0..48))
            .with_message(format!(
                "The {} has a problem",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_label(Label::new(("sample.tao", 50..76))
            .with_message(format!(
                "Usage of {} here",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
        .finish()
        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
        .unwrap();
}
source

pub fn set_help<N: ToString>(&mut self, note: N)

Set the help message of this report.

source

pub fn with_help<N: ToString>(self, note: N) -> Self

Set the help message of this report.

source

pub fn add_label(&mut self, label: Label<S>)

Add a label to the report.

source

pub fn add_labels<L: IntoIterator<Item = Label<S>>>(&mut self, labels: L)

Add multiple labels to the report.

source

pub fn with_label(self, label: Label<S>) -> Self

Add a label to the report.

Examples found in repository?
examples/simple.rs (line 6)
3
4
5
6
7
8
9
10
11
fn main() {
    Report::build(ReportKind::Error, (), 34)
        .with_message("Incompatible types")
        .with_label(Label::new(32..33).with_message("This is of type Nat"))
        .with_label(Label::new(42..45).with_message("This is of type Str"))
        .finish()
        .print(Source::from(include_str!("sample.tao")))
        .unwrap();
}
More examples
Hide additional examples
examples/multifile.rs (lines 14-16)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let c = colors.next();

    Report::build(ReportKind::Error, "b.tao", 10)
        .with_code(3)
        .with_message(format!("Cannot add types Nat and Str"))
        .with_label(Label::new(("b.tao", 10..14))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("b.tao", 17..20))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("b.tao", 15..16))
            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
            .with_color(c)
            .with_order(10))
        .with_label(Label::new(("a.tao", 4..8))
            .with_message(format!("Original definition of {} is here", "five".fg(a)))
            .with_color(a))
        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
        .finish()
        .print(sources(vec![
            ("a.tao", include_str!("a.tao")),
            ("b.tao", include_str!("b.tao")),
        ]))
        .unwrap();
}
examples/multiline.rs (lines 15-17)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate & choose some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let out = Color::Fixed(81);
    let out2= colors.next();

    Report::build(ReportKind::Error, "sample.tao", 12)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("sample.tao", 32..33))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("sample.tao", 42..45))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("sample.tao", 11..48))
            .with_message(format!(
                "The values are outputs of this {} expression",
                "match".fg(out),
            ))
            .with_color(out))
        .with_label(Label::new(("sample.tao", 0..48))
            .with_message(format!(
                "The {} has a problem",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_label(Label::new(("sample.tao", 50..76))
            .with_message(format!(
                "Usage of {} here",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
        .finish()
        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
        .unwrap();
}
examples/stresstest.rs (line 9)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
fn main() {
    let mut colors = ColorGenerator::new();

    Report::build(ReportKind::Error, "stresstest.tao", 13)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))

        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
        .with_config(Config::default()
            .with_cross_gap(false)
            .with_compact(true)
            .with_underlines(true)
            .with_tab_width(4))
        .finish()
        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
        .unwrap();
}
source

pub fn with_labels<L: IntoIterator<Item = Label<S>>>(self, labels: L) -> Self

Add multiple labels to the report.

source

pub fn with_config(self, config: Config) -> Self

Use the given Config to determine diagnostic attributes.

Examples found in repository?
examples/stresstest.rs (lines 51-55)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
fn main() {
    let mut colors = ColorGenerator::new();

    Report::build(ReportKind::Error, "stresstest.tao", 13)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))

        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
        .with_config(Config::default()
            .with_cross_gap(false)
            .with_compact(true)
            .with_underlines(true)
            .with_tab_width(4))
        .finish()
        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
        .unwrap();
}
source

pub fn finish(self) -> Report<'a, S>

Finish building the Report.

Examples found in repository?
examples/simple.rs (line 8)
3
4
5
6
7
8
9
10
11
fn main() {
    Report::build(ReportKind::Error, (), 34)
        .with_message("Incompatible types")
        .with_label(Label::new(32..33).with_message("This is of type Nat"))
        .with_label(Label::new(42..45).with_message("This is of type Str"))
        .finish()
        .print(Source::from(include_str!("sample.tao")))
        .unwrap();
}
More examples
Hide additional examples
examples/multifile.rs (line 28)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let c = colors.next();

    Report::build(ReportKind::Error, "b.tao", 10)
        .with_code(3)
        .with_message(format!("Cannot add types Nat and Str"))
        .with_label(Label::new(("b.tao", 10..14))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("b.tao", 17..20))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("b.tao", 15..16))
            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
            .with_color(c)
            .with_order(10))
        .with_label(Label::new(("a.tao", 4..8))
            .with_message(format!("Original definition of {} is here", "five".fg(a)))
            .with_color(a))
        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
        .finish()
        .print(sources(vec![
            ("a.tao", include_str!("a.tao")),
            ("b.tao", include_str!("b.tao")),
        ]))
        .unwrap();
}
examples/multiline.rs (line 40)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
fn main() {
    let mut colors = ColorGenerator::new();

    // Generate & choose some colours for each of our elements
    let a = colors.next();
    let b = colors.next();
    let out = Color::Fixed(81);
    let out2= colors.next();

    Report::build(ReportKind::Error, "sample.tao", 12)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("sample.tao", 32..33))
            .with_message(format!("This is of type {}", "Nat".fg(a)))
            .with_color(a))
        .with_label(Label::new(("sample.tao", 42..45))
            .with_message(format!("This is of type {}", "Str".fg(b)))
            .with_color(b))
        .with_label(Label::new(("sample.tao", 11..48))
            .with_message(format!(
                "The values are outputs of this {} expression",
                "match".fg(out),
            ))
            .with_color(out))
        .with_label(Label::new(("sample.tao", 0..48))
            .with_message(format!(
                "The {} has a problem",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_label(Label::new(("sample.tao", 50..76))
            .with_message(format!(
                "Usage of {} here",
                "definition".fg(out2),
            ))
            .with_color(out2))
        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
        .finish()
        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
        .unwrap();
}
examples/stresstest.rs (line 56)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
fn main() {
    let mut colors = ColorGenerator::new();

    Report::build(ReportKind::Error, "stresstest.tao", 13)
        .with_code(3)
        .with_message(format!("Incompatible types"))
        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))

        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
        .with_config(Config::default()
            .with_cross_gap(false)
            .with_compact(true)
            .with_underlines(true)
            .with_tab_width(4))
        .finish()
        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
        .unwrap();
}

Trait Implementations§

source§

impl<'a, S: Span> Debug for ReportBuilder<'a, S>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, S> RefUnwindSafe for ReportBuilder<'a, S>where S: RefUnwindSafe, <<S as Span>::SourceId as ToOwned>::Owned: RefUnwindSafe,

§

impl<'a, S> Send for ReportBuilder<'a, S>where S: Send, <<S as Span>::SourceId as ToOwned>::Owned: Send,

§

impl<'a, S> Sync for ReportBuilder<'a, S>where S: Sync, <<S as Span>::SourceId as ToOwned>::Owned: Sync,

§

impl<'a, S> Unpin for ReportBuilder<'a, S>where S: Unpin, <<S as Span>::SourceId as ToOwned>::Owned: Unpin,

§

impl<'a, S> UnwindSafe for ReportBuilder<'a, S>where S: UnwindSafe, <<S as Span>::SourceId as ToOwned>::Owned: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.