A pretty printer for zig
zig

pass runtime context as pointer

altagos.dev f3bc70ac 5c3efbdc

verified
+28 -16
+28 -16
pretty.zig
··· 86 86 global.tty.?.writer = w; 87 87 } 88 88 89 - const rctx = RuntimeContext{ 89 + var rctx = RuntimeContext{ 90 90 .out = w, 91 91 .tty = global.tty.?, 92 92 }; 93 93 94 - return innerFmt(T, cctx, rctx, this.value, .{}); 94 + return innerFmt(T, cctx, &rctx, this.value, .{}); 95 95 } 96 96 }; 97 97 } ··· 104 104 105 105 indent_level: usize = 0, 106 106 107 - pub inline fn print(this: RuntimeContext, comptime fmt: []const u8, args: anytype) error{WriteFailed}!void { 107 + pub inline fn print(this: *const RuntimeContext, comptime fmt: []const u8, args: anytype) error{WriteFailed}!void { 108 108 return this.out.print(fmt, args); 109 109 } 110 110 111 - pub inline fn write(this: RuntimeContext, text: []const u8) error{WriteFailed}!void { 111 + pub inline fn write(this: *const RuntimeContext, text: []const u8) error{WriteFailed}!void { 112 112 return this.out.writeAll(text); 113 113 } 114 114 115 115 pub inline fn setColor( 116 - this: RuntimeContext, 116 + this: *const RuntimeContext, 117 117 comptime ctx: ComptimeContext, 118 118 color: Theme.Colors, 119 119 ) void { 120 120 this.tty.setColor(ctx.options.theme.getColor(color)) catch {}; 121 121 } 122 122 123 - pub inline fn setColorRaw(this: RuntimeContext, color: Io.Terminal.Color) void { 123 + pub inline fn setColorRaw(this: *const RuntimeContext, color: Io.Terminal.Color) void { 124 124 this.tty.setColor(color) catch {}; 125 125 } 126 126 127 - pub inline fn resetColor(this: RuntimeContext) void { 127 + pub inline fn resetColor(this: *const RuntimeContext) void { 128 128 this.tty.setColor(.reset) catch {}; 129 129 } 130 130 }; ··· 150 150 fn innerFmt( 151 151 comptime T: type, 152 152 comptime cctx: ComptimeContext, 153 - rctx: RuntimeContext, 153 + rctx: *RuntimeContext, 154 154 value: T, 155 155 opts: InnerFmtOptions, 156 156 ) error{WriteFailed}!void { ··· 188 188 inline fn printType( 189 189 comptime T: type, 190 190 comptime cctx: ComptimeContext, 191 - rctx: RuntimeContext, 191 + rctx: *RuntimeContext, 192 192 ) error{WriteFailed}!void { 193 193 const active_type = comptime std.meta.activeTag(@typeInfo(T)); 194 194 const excluded = comptime switch (active_type) { ··· 208 208 } 209 209 } 210 210 211 - inline fn formatBool(comptime cctx: ComptimeContext, rctx: RuntimeContext, value: bool) !void { 211 + inline fn formatBool( 212 + comptime cctx: ComptimeContext, 213 + rctx: *const RuntimeContext, 214 + value: bool, 215 + ) !void { 212 216 rctx.setColor(cctx, if (value) .true else .false); 213 217 try rctx.print("{}", .{value}); 214 218 rctx.resetColor(); 215 219 } 216 220 217 - inline fn formatNull(comptime cctx: ComptimeContext, rctx: RuntimeContext) !void { 221 + inline fn formatNull(comptime cctx: ComptimeContext, rctx: *const RuntimeContext) !void { 218 222 rctx.setColor(cctx, .null); 219 223 try rctx.write("null"); 220 224 rctx.resetColor(); ··· 223 227 inline fn formatOptional( 224 228 comptime T: type, 225 229 comptime cctx: ComptimeContext, 226 - rctx: RuntimeContext, 230 + rctx: *RuntimeContext, 227 231 value: ?T, 228 232 ) !void { 229 233 return if (value) |val| ··· 236 240 comptime T: type, 237 241 comptime st: Type.Struct, 238 242 comptime cctx: ComptimeContext, 239 - rctx: RuntimeContext, 243 + rctx: *RuntimeContext, 240 244 value: T, 241 245 ) !void { 242 246 const next_cctx = ComptimeContext{ ··· 273 277 } 274 278 } 275 279 276 - inline fn formatType(comptime cctx: ComptimeContext, rctx: RuntimeContext, value: type) !void { 280 + inline fn formatType( 281 + comptime cctx: ComptimeContext, 282 + rctx: *const RuntimeContext, 283 + value: type, 284 + ) !void { 277 285 rctx.setColor(cctx, .type); 278 286 rctx.setColorRaw(.bold); 279 287 try rctx.write(@typeName(value)); 280 288 rctx.resetColor(); 281 289 } 282 290 283 - inline fn formatValue(comptime cctx: ComptimeContext, rctx: RuntimeContext, value: anytype) !void { 291 + inline fn formatValue( 292 + comptime cctx: ComptimeContext, 293 + rctx: *const RuntimeContext, 294 + value: anytype, 295 + ) !void { 284 296 rctx.setColor(cctx, .value); 285 297 try rctx.print("{}", .{value}); 286 298 rctx.resetColor(); 287 299 } 288 300 289 - inline fn indent(comptime cctx: ComptimeContext, rctx: RuntimeContext) void { 301 + inline fn indent(comptime cctx: ComptimeContext, rctx: *const RuntimeContext) void { 290 302 if (cctx.options.inline_structs) return; 291 303 292 304 const text: [cctx.depth * cctx.options.indent_width]u8 = @splat(' ');