Label

Struct Label 

Source
pub struct Label<S = Range<usize>> { /* private fields */ }
Expand description

A type that represents a labelled section of source code.

Implementations§

Source§

impl<S> Label<S>

Source

pub fn new(span: S) -> Self

Create a new Label.

Examples found in repository?
examples/simple.rs (line 6)
3fn main() {
4    Report::build(ReportKind::Error, (), 34)
5        .with_message("Incompatible types")
6        .with_label(Label::new(32..33).with_message("This is of type Nat"))
7        .with_label(Label::new(42..45).with_message("This is of type Str"))
8        .finish()
9        .print(Source::from(include_str!("sample.tao")))
10        .unwrap();
11}
More examples
Hide additional examples
examples/multifile.rs (line 14)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let c = colors.next();
10
11    Report::build(ReportKind::Error, "b.tao", 10)
12        .with_code(3)
13        .with_message(format!("Cannot add types Nat and Str"))
14        .with_label(Label::new(("b.tao", 10..14))
15            .with_message(format!("This is of type {}", "Nat".fg(a)))
16            .with_color(a))
17        .with_label(Label::new(("b.tao", 17..20))
18            .with_message(format!("This is of type {}", "Str".fg(b)))
19            .with_color(b))
20        .with_label(Label::new(("b.tao", 15..16))
21            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
22            .with_color(c)
23            .with_order(10))
24        .with_label(Label::new(("a.tao", 4..8))
25            .with_message(format!("Original definition of {} is here", "five".fg(a)))
26            .with_color(a))
27        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
28        .finish()
29        .print(sources(vec![
30            ("a.tao", include_str!("a.tao")),
31            ("b.tao", include_str!("b.tao")),
32        ]))
33        .unwrap();
34}
examples/multiline.rs (line 15)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate & choose some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let out = Color::Fixed(81);
10    let out2= colors.next();
11
12    Report::build(ReportKind::Error, "sample.tao", 12)
13        .with_code(3)
14        .with_message(format!("Incompatible types"))
15        .with_label(Label::new(("sample.tao", 32..33))
16            .with_message(format!("This is of type {}", "Nat".fg(a)))
17            .with_color(a))
18        .with_label(Label::new(("sample.tao", 42..45))
19            .with_message(format!("This is of type {}", "Str".fg(b)))
20            .with_color(b))
21        .with_label(Label::new(("sample.tao", 11..48))
22            .with_message(format!(
23                "The values are outputs of this {} expression",
24                "match".fg(out),
25            ))
26            .with_color(out))
27        .with_label(Label::new(("sample.tao", 0..48))
28            .with_message(format!(
29                "The {} has a problem",
30                "definition".fg(out2),
31            ))
32            .with_color(out2))
33        .with_label(Label::new(("sample.tao", 50..76))
34            .with_message(format!(
35                "Usage of {} here",
36                "definition".fg(out2),
37            ))
38            .with_color(out2))
39        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
40        .finish()
41        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
42        .unwrap();
43}
examples/stresstest.rs (line 9)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    Report::build(ReportKind::Error, "stresstest.tao", 13)
7        .with_code(3)
8        .with_message(format!("Incompatible types"))
9        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
10        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
11        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
12        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
13        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
14        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
15        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
16        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
17        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
18        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
19        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
20        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
21        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
22        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
23        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
24        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
25        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
26        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
27        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
28        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
29        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))
30
31        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
32        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
33        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
34        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
35        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
36        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
37        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
38        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
39        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
40        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
41        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
42        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
43        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
44        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
45        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
46        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
47        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
48        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
49        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
50        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
51        .with_config(Config::default()
52            .with_cross_gap(false)
53            .with_compact(true)
54            .with_underlines(true)
55            .with_tab_width(4))
56        .finish()
57        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
58        .unwrap();
59}
Source

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

Give this label a message.

Examples found in repository?
examples/simple.rs (line 6)
3fn main() {
4    Report::build(ReportKind::Error, (), 34)
5        .with_message("Incompatible types")
6        .with_label(Label::new(32..33).with_message("This is of type Nat"))
7        .with_label(Label::new(42..45).with_message("This is of type Str"))
8        .finish()
9        .print(Source::from(include_str!("sample.tao")))
10        .unwrap();
11}
More examples
Hide additional examples
examples/multifile.rs (line 15)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let c = colors.next();
10
11    Report::build(ReportKind::Error, "b.tao", 10)
12        .with_code(3)
13        .with_message(format!("Cannot add types Nat and Str"))
14        .with_label(Label::new(("b.tao", 10..14))
15            .with_message(format!("This is of type {}", "Nat".fg(a)))
16            .with_color(a))
17        .with_label(Label::new(("b.tao", 17..20))
18            .with_message(format!("This is of type {}", "Str".fg(b)))
19            .with_color(b))
20        .with_label(Label::new(("b.tao", 15..16))
21            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
22            .with_color(c)
23            .with_order(10))
24        .with_label(Label::new(("a.tao", 4..8))
25            .with_message(format!("Original definition of {} is here", "five".fg(a)))
26            .with_color(a))
27        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
28        .finish()
29        .print(sources(vec![
30            ("a.tao", include_str!("a.tao")),
31            ("b.tao", include_str!("b.tao")),
32        ]))
33        .unwrap();
34}
examples/multiline.rs (line 16)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate & choose some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let out = Color::Fixed(81);
10    let out2= colors.next();
11
12    Report::build(ReportKind::Error, "sample.tao", 12)
13        .with_code(3)
14        .with_message(format!("Incompatible types"))
15        .with_label(Label::new(("sample.tao", 32..33))
16            .with_message(format!("This is of type {}", "Nat".fg(a)))
17            .with_color(a))
18        .with_label(Label::new(("sample.tao", 42..45))
19            .with_message(format!("This is of type {}", "Str".fg(b)))
20            .with_color(b))
21        .with_label(Label::new(("sample.tao", 11..48))
22            .with_message(format!(
23                "The values are outputs of this {} expression",
24                "match".fg(out),
25            ))
26            .with_color(out))
27        .with_label(Label::new(("sample.tao", 0..48))
28            .with_message(format!(
29                "The {} has a problem",
30                "definition".fg(out2),
31            ))
32            .with_color(out2))
33        .with_label(Label::new(("sample.tao", 50..76))
34            .with_message(format!(
35                "Usage of {} here",
36                "definition".fg(out2),
37            ))
38            .with_color(out2))
39        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
40        .finish()
41        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
42        .unwrap();
43}
examples/stresstest.rs (line 9)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    Report::build(ReportKind::Error, "stresstest.tao", 13)
7        .with_code(3)
8        .with_message(format!("Incompatible types"))
9        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
10        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
11        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
12        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
13        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
14        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
15        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
16        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
17        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
18        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
19        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
20        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
21        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
22        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
23        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
24        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
25        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
26        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
27        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
28        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
29        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))
30
31        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
32        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
33        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
34        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
35        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
36        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
37        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
38        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
39        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
40        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
41        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
42        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
43        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
44        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
45        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
46        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
47        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
48        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
49        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
50        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
51        .with_config(Config::default()
52            .with_cross_gap(false)
53            .with_compact(true)
54            .with_underlines(true)
55            .with_tab_width(4))
56        .finish()
57        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
58        .unwrap();
59}
Source

pub fn with_color(self, color: Color) -> Self

Give this label a highlight colour.

Examples found in repository?
examples/multifile.rs (line 16)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let c = colors.next();
10
11    Report::build(ReportKind::Error, "b.tao", 10)
12        .with_code(3)
13        .with_message(format!("Cannot add types Nat and Str"))
14        .with_label(Label::new(("b.tao", 10..14))
15            .with_message(format!("This is of type {}", "Nat".fg(a)))
16            .with_color(a))
17        .with_label(Label::new(("b.tao", 17..20))
18            .with_message(format!("This is of type {}", "Str".fg(b)))
19            .with_color(b))
20        .with_label(Label::new(("b.tao", 15..16))
21            .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
22            .with_color(c)
23            .with_order(10))
24        .with_label(Label::new(("a.tao", 4..8))
25            .with_message(format!("Original definition of {} is here", "five".fg(a)))
26            .with_color(a))
27        .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
28        .finish()
29        .print(sources(vec![
30            ("a.tao", include_str!("a.tao")),
31            ("b.tao", include_str!("b.tao")),
32        ]))
33        .unwrap();
34}
More examples
Hide additional examples
examples/multiline.rs (line 17)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    // Generate & choose some colours for each of our elements
7    let a = colors.next();
8    let b = colors.next();
9    let out = Color::Fixed(81);
10    let out2= colors.next();
11
12    Report::build(ReportKind::Error, "sample.tao", 12)
13        .with_code(3)
14        .with_message(format!("Incompatible types"))
15        .with_label(Label::new(("sample.tao", 32..33))
16            .with_message(format!("This is of type {}", "Nat".fg(a)))
17            .with_color(a))
18        .with_label(Label::new(("sample.tao", 42..45))
19            .with_message(format!("This is of type {}", "Str".fg(b)))
20            .with_color(b))
21        .with_label(Label::new(("sample.tao", 11..48))
22            .with_message(format!(
23                "The values are outputs of this {} expression",
24                "match".fg(out),
25            ))
26            .with_color(out))
27        .with_label(Label::new(("sample.tao", 0..48))
28            .with_message(format!(
29                "The {} has a problem",
30                "definition".fg(out2),
31            ))
32            .with_color(out2))
33        .with_label(Label::new(("sample.tao", 50..76))
34            .with_message(format!(
35                "Usage of {} here",
36                "definition".fg(out2),
37            ))
38            .with_color(out2))
39        .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
40        .finish()
41        .print(("sample.tao", Source::from(include_str!("sample.tao"))))
42        .unwrap();
43}
examples/stresstest.rs (line 9)
3fn main() {
4    let mut colors = ColorGenerator::new();
5
6    Report::build(ReportKind::Error, "stresstest.tao", 13)
7        .with_code(3)
8        .with_message(format!("Incompatible types"))
9        .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
10        .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
11        .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
12        .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
13        .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
14        .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
15        .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
16        .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
17        .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
18        .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
19        .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
20        .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
21        .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
22        .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
23        .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
24        .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
25        .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
26        .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
27        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
28        .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
29        .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))
30
31        .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
32        .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
33        .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
34        .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
35        .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
36        .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
37        .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
38        .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
39        .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
40        .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
41        .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
42        .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
43        .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
44        .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
45        .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
46        .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
47        .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
48        .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
49        .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
50        .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
51        .with_config(Config::default()
52            .with_cross_gap(false)
53            .with_compact(true)
54            .with_underlines(true)
55            .with_tab_width(4))
56        .finish()
57        .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
58        .unwrap();
59}
Source

pub fn with_order(self, order: i32) -> Self

Specify the order of this label relative to other labels.

Lower values correspond to this label having an earlier order.

If unspecified, labels default to an order of 0.

When labels are displayed after a line the crate needs to decide which labels should be displayed first. By Default, the orders labels based on where their associated line meets the text (see LabelAttach). Additionally, multi-line labels are ordered before inline labels. You can this this function to override this behaviour.

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

pub fn with_priority(self, priority: i32) -> Self

Specify the priority of this label relative to other labels.

Higher values correspond to this label having a higher priority.

If unspecified, labels default to a priority of 0.

Label spans can overlap. When this happens, the crate needs to decide which labels to prioritise for various purposes such as highlighting. By default, spans with a smaller length get a higher priority. You can this this function to override this behaviour.

Trait Implementations§

Source§

impl<S: Clone> Clone for Label<S>

Source§

fn clone(&self) -> Label<S>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<S: Debug> Debug for Label<S>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<S: Hash> Hash for Label<S>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<S: PartialEq> PartialEq for Label<S>

Source§

fn eq(&self, other: &Label<S>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<S: Eq> Eq for Label<S>

Source§

impl<S> StructuralPartialEq for Label<S>

Auto Trait Implementations§

§

impl<S> Freeze for Label<S>
where S: Freeze,

§

impl<S> RefUnwindSafe for Label<S>
where S: RefUnwindSafe,

§

impl<S> Send for Label<S>
where S: Send,

§

impl<S> Sync for Label<S>
where S: Sync,

§

impl<S> Unpin for Label<S>
where S: Unpin,

§

impl<S> UnwindSafe for Label<S>
where S: UnwindSafe,

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.