Logging โ
What you'll learn โ
- How to enable level-gated logging and record parse events.
Complete example โ
zig
parser.setLogger(.{ .level = .debug, .prefix = "my-parser" });
// ... parse ...
parser.setLogger(.{}); // back to silent (.off is the default)Levels, in increasing verbosity: .off, .err, .warn, .info, .debug, .trace. Disabled levels compile to a cheap integer comparison โ no formatting work happens when logging is off.
For programmatic tracing, attach a Tracer (caller-owned) alongside the logger โ the parser records structured TraceEvents (parse_begin, shift, reduce, accept, recover, lex_token, reuse_node) into it:
zig
var tracer = treesitter.Tracer.init(gpa, .{ .level = .off });
defer tracer.deinit();
parser.setTracer(&tracer);
// ... parse ...
std.debug.print("events: {d}\n", .{tracer.count()});
parser.setTracer(null); // detachAPI used โ
- Logging;
debug/logger.ziganddebug/trace.zigviatreesitter.debug_mod.
