struct Diagnostics [src]
Information about the success or failure of a parse.
Fields
ast: Ast = .{
.source = "",
.tokens = .empty,
.nodes = .empty,
.extra_data = &.{},
.mode = .zon,
.errors = &.{},
}
zoir: Zoir = .{
.nodes = .empty,
.extra = &.{},
.limbs = &.{},
.string_bytes = &.{},
.compile_errors = &.{},
.error_notes = &.{},
}
type_check: ?Error.TypeCheckFailure = null
Members
- deinit (Function)
- format (Function)
- iterateErrors (Function)
Source
pub const Diagnostics = struct {
ast: Ast = .{
.source = "",
.tokens = .empty,
.nodes = .empty,
.extra_data = &.{},
.mode = .zon,
.errors = &.{},
},
zoir: Zoir = .{
.nodes = .empty,
.extra = &.{},
.limbs = &.{},
.string_bytes = &.{},
.compile_errors = &.{},
.error_notes = &.{},
},
type_check: ?Error.TypeCheckFailure = null,
fn assertEmpty(self: Diagnostics) void {
assert(self.ast.tokens.len == 0);
assert(self.zoir.nodes.len == 0);
assert(self.type_check == null);
}
pub fn deinit(self: *Diagnostics, gpa: Allocator) void {
self.ast.deinit(gpa);
self.zoir.deinit(gpa);
if (self.type_check) |tc| tc.deinit(gpa);
self.* = undefined;
}
pub fn iterateErrors(self: *const Diagnostics) Error.Iterator {
return .{ .diag = self };
}
pub fn format(self: *const @This(), w: *std.Io.Writer) std.Io.Writer.Error!void {
var errors = self.iterateErrors();
while (errors.next()) |err| {
const loc = err.getLocation(self);
const msg = err.fmtMessage(self);
try w.print("{d}:{d}: error: {f}\n", .{ loc.line + 1, loc.column + 1, msg });
var notes = err.iterateNotes(self);
while (notes.next()) |note| {
const note_loc = note.getLocation(self);
const note_msg = note.fmtMessage(self);
try w.print("{d}:{d}: note: {f}\n", .{
note_loc.line + 1,
note_loc.column + 1,
note_msg,
});
}
}
}
}