zyn_core/mark/mod.rs
1//! Diagnostic construction utilities.
2//!
3//! The [`mark`](self) module provides free functions returning a [`Builder`],
4//! which accumulates diagnostics and is finalized into an immutable [`Diagnostic`]
5//! via [`Builder::build`].
6//!
7//! # Quick start
8//!
9//! ```ignore
10//! // Single error
11//! return Err(mark::error("field `name` is required").build());
12//!
13//! // Accumulator
14//! let d = mark::new()
15//! .add(mark::error("missing `x`"))
16//! .add(mark::help("add `x: u32` to your struct"))
17//! .build();
18//! if d.is_error() { return d.emit(); }
19//! ```
20
21mod diagnostic;
22mod level;
23mod span;
24
25pub use diagnostic::Builder;
26pub use diagnostic::Diagnostic;
27pub use diagnostic::Result;
28pub use diagnostic::Walk;
29pub use level::*;
30pub use span::*;
31
32/// Creates an empty diagnostic builder.
33pub fn new() -> Builder {
34 Builder::default()
35}
36
37/// Creates an error diagnostic builder with the given message.
38pub fn error(message: impl Into<String>) -> Builder {
39 Builder::default().level(Level::Error).message(message)
40}
41
42/// Creates a warning diagnostic builder with the given message.
43pub fn warning(message: impl Into<String>) -> Builder {
44 Builder::default().level(Level::Warning).message(message)
45}
46
47/// Creates a note diagnostic builder with the given message.
48pub fn note(message: impl Into<String>) -> Builder {
49 Builder::default().level(Level::Note).message(message)
50}
51
52/// Creates a help diagnostic builder with the given message.
53pub fn help(message: impl Into<String>) -> Builder {
54 Builder::default().level(Level::Help).message(message)
55}