Source
   pub fn printError(self: Token, gpa: Allocator, list: *std.ArrayListUnmanaged(u8)) error{OutOfMemory}!void {
    switch (self) {
        .target, .target_must_resolve, .prereq, .prereq_must_resolve => unreachable, // not an error
        .incomplete_quoted_prerequisite,
        .incomplete_target,
        => |index_and_bytes| {
            try list.print(gpa, "{s} '", .{self.errStr()});
            if (self == .incomplete_target) {
                const tmp = Token{ .target_must_resolve = index_and_bytes.bytes };
                try tmp.resolve(gpa, list);
            } else {
                try printCharValues(gpa, list, index_and_bytes.bytes);
            }
            try list.print(gpa, "' at position {d}", .{index_and_bytes.index});
        },
        .invalid_target,
        .bad_target_escape,
        .expected_dollar_sign,
        .continuation_eol,
        .incomplete_escape,
        .expected_colon,
        => |index_and_char| {
            try list.appendSlice(gpa, "illegal char ");
            try printUnderstandableChar(gpa, list, index_and_char.char);
            try list.print(gpa, " at position {d}: {s}", .{ index_and_char.index, self.errStr() });
        },
    }
}