parent
903f85ab94
commit
0e53ac1328
@ -2144,6 +2144,29 @@ fn completionHandler(server: *Server, request: types.CompletionParams) Error!?ty
|
|||||||
|
|
||||||
const completions = maybe_completions orelse return null;
|
const completions = maybe_completions orelse return null;
|
||||||
|
|
||||||
|
// The cursor is in the middle of a word or before a @, so we can replace
|
||||||
|
// the remaining identifier with the completion instead of just inserting.
|
||||||
|
// TODO Identify function call/struct init and replace the whole thing.
|
||||||
|
const lookahead_context = try analysis.getPositionContext(server.arena.allocator(), handle.text, source_index, true);
|
||||||
|
if (server.client_capabilities.supports_apply_edits and pos_context.loc() != null and lookahead_context.loc() != null and pos_context.loc().?.end != lookahead_context.loc().?.end) {
|
||||||
|
var end = lookahead_context.loc().?.end;
|
||||||
|
while (end < handle.text.len and (std.ascii.isAlphanumeric(handle.text[end]) or handle.text[end] == '"')) {
|
||||||
|
end += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const replaceLoc = offsets.Loc{ .start = lookahead_context.loc().?.start, .end = end };
|
||||||
|
const replaceRange = offsets.locToRange(handle.text, replaceLoc, server.offset_encoding);
|
||||||
|
|
||||||
|
for (completions) |*item| {
|
||||||
|
item.textEdit = .{
|
||||||
|
.TextEdit = .{
|
||||||
|
.newText = item.insertText orelse item.label,
|
||||||
|
.range = replaceRange,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// truncate completions
|
// truncate completions
|
||||||
for (completions) |*item| {
|
for (completions) |*item| {
|
||||||
if (item.detail) |det| {
|
if (item.detail) |det| {
|
||||||
|
Loading…
Reference in New Issue
Block a user