From ebb7fb399ed9a6d6a10d034e5a2f2d672075e7b3 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 2 Oct 2025 14:58:32 +0200 Subject: [PATCH 1/3] fix: support TextEdit responses to completion requests In addition to InsertReplaceEdit responses. This improves completion with OmniSharp and possibly others. --- src/Project.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Project.zig b/src/Project.zig index 2aaede9..5496358 100644 --- a/src/Project.zig +++ b/src/Project.zig @@ -1086,7 +1086,7 @@ fn send_completion_item(to: tp.pid_ref, file_path: []const u8, row: usize, col: var range_: []const u8 = undefined; if (!(try cbor.matchValue(&iter, cbor.extract_cbor(&range_)))) return invalid_field("textEdit.insert"); 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; if (!(try cbor.matchValue(&iter, cbor.extract_cbor(&range_)))) return invalid_field("textEdit.replace"); textEdit_replace = try read_range(range_); From 778907c51343eab1d73bbb70ddf10a81c5ddf01b Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 2 Oct 2025 15:00:00 +0200 Subject: [PATCH 2/3] fix: ignore empty replacement selections for completion --- src/tui/mode/overlay/completion_palette.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tui/mode/overlay/completion_palette.zig b/src/tui/mode/overlay/completion_palette.zig index ce7afde..c36b4a3 100644 --- a/src/tui/mode/overlay/completion_palette.zig +++ b/src/tui/mode/overlay/completion_palette.zig @@ -41,7 +41,7 @@ pub fn load_entries(palette: *Type) !usize { var max_label_len: usize = 0; for (palette.entries.items) |*item| { 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; item.label = label_; item.sort_text = sort_text; From 81a1c888473805c92d1ab4f95a6a9308537b3ac4 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 2 Oct 2025 15:00:33 +0200 Subject: [PATCH 3/3] fix: force refresh on add_completion_done events for slow language servers --- src/tui/mainview.zig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index 6cce2b3..530e8cf 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -879,8 +879,10 @@ const cmds = struct { tp.extract(&col), })) return error.InvalidAddDiagnosticArgument; 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); + tui.need_render(); + }; } pub const add_completion_done_meta: Meta = .{ .arguments = &.{