Skip to content

Parser Reuse โ€‹

What you'll learn โ€‹

  • Why one long-lived parser beats a parser per parse.

Complete example โ€‹

zig
var parser = treesitter.Parser.init(allocator);
defer parser.deinit();
try parser.setLanguage(lang);

var t1 = try parser.parseString("1 + 2");
defer t1.deinit();
var t2 = try parser.parseString("3 * 4");
defer t2.deinit();

How it works โ€‹

The parser keeps its state stack, token scratch space, reuse-candidate list, and included-range list between parses with retained capacity. Each parse clears lengths but keeps buffers, so steady-state editor workloads allocate only for genuinely new tree content. setLanguage also clears the stack (states belong to a grammar). Call parser.reset() to additionally drop retained scratch capacity between unrelated workloads.

API used โ€‹

  • Parser โ€” parseString, parse, reset.

Released under the MIT License.