diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-28 17:13:46 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:15 -0300 |
| commit | c5d96bec3d5279904525292ef933a985a974b017 (patch) | |
| tree | 968d8ca5a1d2955c4b8f86354963f5f7d28c6350 /src/syntax.zig | |
| parent | df4d11bb95bc7ea9554b55d2211c4704a2594f08 (diff) | |
| download | pardes-c5d96bec3d5279904525292ef933a985a974b017.tar.gz pardes-c5d96bec3d5279904525292ef933a985a974b017.zip | |
Zig has textobjects: helix's query, ported to the zig grammar pardes builds
pardes builds maxxnino/tree-sitter-zig, whose node names are not those of
the grammar helix's query targets, so the query is ported by hand
(vendor/queries/zig, its MPL header saying it is modified and how): a
function is a Decl holding an FnProto and a Block with pub beside it,
struct/enum/union one ContainerDecl, parameters and arguments ParamDeclList
and FnCallArguments, and comments come in three kinds. That grammar's
comments take their line's newline, and a node ending in a newline is now
taken without it, as helix's grammars have it. The replay test gains fifteen
Zig cases from the installed hx; none walks call arguments, which the
reference helix counts as parameters and 25.07.1's query does not.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/syntax.zig')
| -rw-r--r-- | src/syntax.zig | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/syntax.zig b/src/syntax.zig index 3a83800b..4494945f 100644 --- a/src/syntax.zig +++ b/src/syntax.zig @@ -475,7 +475,10 @@ fn matchSpan(q: *const ts.Query, match: anytype, capture: u32, text: []const u8) const s: Span = .{ .from = c.node.startByte(), .to = c.node.endByte() }; span = if (span) |old| .{ .from = @min(old.from, s.from), .to = @max(old.to, s.to) } else s; }; - const found = span orelse return null; + var found = span orelse return null; + // a node that takes its line's newline (this zig grammar's comments) + // is the line without it, as helix's grammars have it + if (found.to > found.from + 1 and found.to <= text.len and text[found.to - 1] == '\n') found.to -= 1; const steps = q.predicatesForPattern(match.pattern_index); var i: usize = 0; while (i < steps.len) { |
