From 42b7ae46a0b620f4df95220522bee1854fa8de53 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Wed, 1 Oct 2025 21:29:05 +0200 Subject: [PATCH] fix: open competion palette after all completions are received --- src/Project.zig | 1 + src/tui/mainview.zig | 29 ++++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Project.zig b/src/Project.zig index 982cea6..2aaede9 100644 --- a/src/Project.zig +++ b/src/Project.zig @@ -1012,6 +1012,7 @@ fn send_completion_items(to: tp.pid_ref, file_path: []const u8, row: usize, col: if (!(try cbor.matchValue(&iter, cbor.extract_cbor(&item)))) return error.InvalidMessageField; try send_completion_item(to, file_path, row, col, item, if (len > 1) true else is_incomplete); } + return to.send(.{ "cmd", "add_completion_done", .{ file_path, row, col } }) catch error.ClientFailed; } fn invalid_field(field: []const u8) error{InvalidMessage} { diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index 0535ce4..6cce2b3 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -838,11 +838,8 @@ const cmds = struct { tp.more, })) 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 "")) - try editor.add_completion(row, col, is_incomplete, ctx.args); - try tui.open_overlay(@import("mode/overlay/completion_palette.zig").Type); - } + if (self.get_active_editor()) |editor| if (std.mem.eql(u8, file_path, editor.file_path orelse "")) + try editor.add_completion(row, col, is_incomplete, ctx.args); } pub const add_completion_meta: Meta = .{ .arguments = &.{ @@ -871,6 +868,28 @@ const cmds = struct { }, }; + pub fn add_completion_done(self: *Self, ctx: Ctx) Result { + var file_path: []const u8 = undefined; + var row: usize = undefined; + var col: usize = undefined; + + if (!try ctx.args.match(.{ + tp.extract(&file_path), + tp.extract(&row), + 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 "")) + try tui.open_overlay(@import("mode/overlay/completion_palette.zig").Type); + } + pub const add_completion_done_meta: Meta = .{ + .arguments = &.{ + .string, // file_path + .integer, // row + .integer, // col + }, + }; + pub fn rename_symbol_item(self: *Self, ctx: Ctx) Result { const editor = self.get_active_editor() orelse return; // because the incoming message is an array of Renames, we manuallly