feat(completion): forward completion entries to current editor
This commit is contained in:
parent
f59125f74a
commit
8934bf5cd0
4 changed files with 77 additions and 22 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ pub const ArgumentType = enum {
|
|||
string,
|
||||
integer,
|
||||
float,
|
||||
boolean,
|
||||
object,
|
||||
array,
|
||||
};
|
||||
|
|
|
@ -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) }))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue