diff --git a/src/Project.zig b/src/Project.zig index 60ed0e9..682fbcc 100644 --- a/src/Project.zig +++ b/src/Project.zig @@ -1030,28 +1030,30 @@ fn send_completion_item(to: tp.pid_ref, file_path: []const u8, row: usize, col: const insert = textEdit_insert orelse return error.InvalidMessageField; const replace = textEdit_replace orelse return error.InvalidMessageField; return to.send(.{ - "completion_item", - file_path, - row, - col, - is_incomplete, - label, - label_detail, - label_description, - kind, - detail, - documentation, - sortText, - insertTextFormat, - textEdit_newText, - insert.start.line, - insert.start.character, - insert.end.line, - insert.end.character, - replace.start.line, - replace.start.character, - replace.end.line, - replace.end.character, + "cmd", "add_completion", .{ + file_path, + row, + col, + is_incomplete, + label, + label_detail, + label_description, + kind, + detail, + documentation, + documentation_kind, + sortText, + insertTextFormat, + textEdit_newText, + insert.start.line, + insert.start.character, + insert.end.line, + insert.end.character, + replace.start.line, + replace.start.character, + replace.end.line, + replace.end.character, + }, }) catch error.ClientFailed; } diff --git a/src/command.zig b/src/command.zig index e2b5ef4..e7e0829 100644 --- a/src/command.zig +++ b/src/command.zig @@ -39,6 +39,7 @@ pub const ArgumentType = enum { string, integer, float, + boolean, object, array, }; diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 8967026..64a5f7d 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -5476,6 +5476,14 @@ pub const Editor = struct { self.need_render(); } + pub fn add_completion(self: *Self, row: usize, col: usize, is_incomplete: bool, msg: tp.message) Result { + _ = self; + _ = row; + _ = col; + _ = is_incomplete; + _ = msg; + } + pub fn select(self: *Self, ctx: Context) Result { var sel: Selection = .{}; if (!try ctx.args.match(.{ tp.extract(&sel.begin.row), tp.extract(&sel.begin.col), tp.extract(&sel.end.row), tp.extract(&sel.end.col) })) diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index b68e273..e0c531e 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -726,6 +726,50 @@ const cmds = struct { } pub const add_diagnostic_meta: Meta = .{ .arguments = &.{ .string, .string, .string, .string, .integer, .integer, .integer, .integer, .integer } }; + pub fn add_completion(self: *Self, ctx: Ctx) Result { + var file_path: []const u8 = undefined; + var row: usize = undefined; + var col: usize = undefined; + var is_incomplete: bool = undefined; + + if (!try ctx.args.match(.{ + tp.extract(&file_path), + tp.extract(&row), + tp.extract(&col), + tp.extract(&is_incomplete), + 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); + } + pub const add_completion_meta: Meta = .{ + .arguments = &.{ + .string, // file_path + .integer, // row + .integer, // col + .boolean, // is_incomplete + .string, // label + .string, // label_detail + .string, // label_description + .integer, // kind + .string, // detail + .string, // documentation + .string, // documentation_kind + .string, // sortText + .integer, // insertTextFormat + .string, // textEdit_newText + .integer, // insert.begin.row + .integer, // insert.begin.col + .integer, // insert.end.row + .integer, // insert.end.col + .integer, // replace.begin.row + .integer, // replace.begin.col + .integer, // replace.end.row + .integer, // replace.end.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