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

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, }); } } } }