fix: hover does not process a list of results correctly

see #411

Not a fix, but related.
This commit is contained in:
CJ van den Berg 2025-12-03 14:33:53 +01:00
parent 6c012d090b
commit 35aa99f57f
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -1718,37 +1718,26 @@ fn send_contents(
if (try cbor.matchValue(&iter, cbor.extract(&value))) if (try cbor.matchValue(&iter, cbor.extract(&value)))
return send_content_msg(to, tag, file_path, row, col, kind, value, range); return send_content_msg(to, tag, file_path, row, col, kind, value, range);
var is_list = true; var list_size = cbor.decodeArrayHeader(&iter) catch blk: {
var len = cbor.decodeArrayHeader(&iter) catch blk: {
is_list = false;
iter = result; iter = result;
break :blk cbor.decodeMapHeader(&iter) catch return; break :blk 1;
}; };
if (is_list) { while (list_size > 0) : (list_size -= 1) {
var content: std.Io.Writer.Allocating = .init(std.heap.c_allocator); var len = cbor.decodeMapHeader(&iter) catch return;
defer content.deinit();
while (len > 0) : (len -= 1) { while (len > 0) : (len -= 1) {
if (try cbor.matchValue(&iter, cbor.extract(&value))) { var field_name: []const u8 = undefined;
try content.writer.writeAll(value); if (!(try cbor.matchString(&iter, &field_name))) return error.InvalidMessage;
if (len > 1) try content.writer.writeAll("\n"); if (std.mem.eql(u8, field_name, "kind")) {
if (!(try cbor.matchValue(&iter, cbor.extract(&kind)))) return error.InvalidMessageField;
} else if (std.mem.eql(u8, field_name, "value")) {
if (!(try cbor.matchValue(&iter, cbor.extract(&value)))) return error.InvalidMessageField;
} else {
try cbor.skipValue(&iter);
} }
} }
return send_content_msg(to, tag, file_path, row, col, kind, content.written(), range); try send_content_msg(to, tag, file_path, row, col, kind, value, range);
} }
while (len > 0) : (len -= 1) {
var field_name: []const u8 = undefined;
if (!(try cbor.matchString(&iter, &field_name))) return error.InvalidMessage;
if (std.mem.eql(u8, field_name, "kind")) {
if (!(try cbor.matchValue(&iter, cbor.extract(&kind)))) return error.InvalidMessageField;
} else if (std.mem.eql(u8, field_name, "value")) {
if (!(try cbor.matchValue(&iter, cbor.extract(&value)))) return error.InvalidMessageField;
} else {
try cbor.skipValue(&iter);
}
}
return send_content_msg(to, tag, file_path, row, col, kind, value, range);
} }
fn send_content_msg( fn send_content_msg(