fix: hover does not process a list of results correctly
see #411 Not a fix, but related.
This commit is contained in:
parent
6c012d090b
commit
35aa99f57f
1 changed files with 13 additions and 24 deletions
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue