Compare commits

...

3 commits

Author SHA1 Message Date
81a1c88847
fix: force refresh on add_completion_done events for slow language servers 2025-10-02 15:00:33 +02:00
778907c513
fix: ignore empty replacement selections for completion 2025-10-02 15:00:00 +02:00
ebb7fb399e
fix: support TextEdit responses to completion requests
In addition to InsertReplaceEdit responses.

This improves completion with OmniSharp and possibly others.
2025-10-02 14:58:32 +02:00
3 changed files with 5 additions and 3 deletions

View file

@ -1086,7 +1086,7 @@ fn send_completion_item(to: tp.pid_ref, file_path: []const u8, row: usize, col:
var range_: []const u8 = undefined; var range_: []const u8 = undefined;
if (!(try cbor.matchValue(&iter, cbor.extract_cbor(&range_)))) return invalid_field("textEdit.insert"); if (!(try cbor.matchValue(&iter, cbor.extract_cbor(&range_)))) return invalid_field("textEdit.insert");
textEdit_insert = try read_range(range_); textEdit_insert = try read_range(range_);
} else if (std.mem.eql(u8, field_name, "replace")) { } else if (std.mem.eql(u8, field_name, "replace") or std.mem.eql(u8, field_name, "range")) {
var range_: []const u8 = undefined; var range_: []const u8 = undefined;
if (!(try cbor.matchValue(&iter, cbor.extract_cbor(&range_)))) return invalid_field("textEdit.replace"); if (!(try cbor.matchValue(&iter, cbor.extract_cbor(&range_)))) return invalid_field("textEdit.replace");
textEdit_replace = try read_range(range_); textEdit_replace = try read_range(range_);

View file

@ -879,8 +879,10 @@ const cmds = struct {
tp.extract(&col), tp.extract(&col),
})) return error.InvalidAddDiagnosticArgument; })) return error.InvalidAddDiagnosticArgument;
file_path = project_manager.normalize_file_path(file_path); file_path = project_manager.normalize_file_path(file_path);
if (self.get_active_editor()) |editor| if (std.mem.eql(u8, file_path, editor.file_path orelse "")) if (self.get_active_editor()) |editor| if (std.mem.eql(u8, file_path, editor.file_path orelse "")) {
try tui.open_overlay(@import("mode/overlay/completion_palette.zig").Type); try tui.open_overlay(@import("mode/overlay/completion_palette.zig").Type);
tui.need_render();
};
} }
pub const add_completion_done_meta: Meta = .{ pub const add_completion_done_meta: Meta = .{
.arguments = &.{ .arguments = &.{

View file

@ -41,7 +41,7 @@ pub fn load_entries(palette: *Type) !usize {
var max_label_len: usize = 0; var max_label_len: usize = 0;
for (palette.entries.items) |*item| { for (palette.entries.items) |*item| {
const label_, const sort_text, _, const replace = get_values(item.cbor); const label_, const sort_text, _, const replace = get_values(item.cbor);
if (palette.value.replace == null) if (palette.value.replace == null and !(replace.begin.row == 0 and replace.begin.col == 0 and replace.end.row == 0 and replace.end.col == 0))
palette.value.replace = replace; palette.value.replace = replace;
item.label = label_; item.label = label_;
item.sort_text = sort_text; item.sort_text = sort_text;