Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions lua/copilot_cmp/comparators.lua
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
local comparators = {}

comparators.score = function (entry1, entry2)
if entry1.score and entry2.score then
return entry1.score > entry2.score
comparators.score = function(entry1, entry2)
local diff = (entry1.completion_item.copilot and 1.2 * entry1.score or entry1.score)
- (entry2.completion_item.copilot and 1.2 * entry2.score or entry2.score)
if diff < 0 then
return false
end
return diff > 0 or nil
end

comparators.prioritize = function (entry1, entry2)
if entry1.copilot and not entry2.copilot then
comparators.prioritize = function(entry1, entry2)
if entry1.completion_item.copilot and not entry2.completion_item.copilot then
return true
elseif entry2.copilot and not entry1.copilot then
elseif entry2.completion_item.copilot and not entry1.completion_item.copilot then
return false
end
end
Expand Down
25 changes: 16 additions & 9 deletions lua/copilot_cmp/completion_functions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,38 @@ local api = require("copilot.api")
local methods = {
opts = {
fix_pairs = true,
}
},
}

methods.getCompletionsCycling = function (self, params, callback)
methods.getCompletionsCycling = function(self, params, callback)
local respond_callback = function(err, response)

if err or not response or not response.completions then
return callback({isIncomplete = false, items = {}})
return callback({ isIncomplete = true, items = {} })
end

local indent = params.context.cursor_before_line:find("%S") or 1

local items = vim.tbl_map(function(item)
return format.format_item(item, params.context, methods.opts)
local ret = format.format_item(item, params.context, methods.opts)

ret.textEdit.insert.start.character = ret.textEdit.insert.start.character + indent - 1
ret.textEdit.newText = ret.textEdit.newText:sub(indent)
if ret.textEdit.insert["end"].character < ret.textEdit.insert.start.character then
ret.textEdit.insert["end"].character = ret.textEdit.insert.start.character
end
return ret
end, vim.tbl_values(response.completions))

return callback({
isIncomplete = false,
items = items
isIncomplete = true,
items = items,
})
end

api.get_completions_cycling(self.client, util.get_doc_params(), respond_callback)
return callback({isIncomplete = true, items = {}})
end

methods.init = function (completion_method, opts)
methods.init = function(completion_method, opts)
methods.opts.fix_pairs = opts.fix_pairs
return methods[completion_method]
end
Expand Down
12 changes: 4 additions & 8 deletions lua/copilot_cmp/source.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,12 @@ local source = {
executions = {},
}

function source:get_keyword_pattern()
return '.'
end

source.get_trigger_characters = function()
return {'.'}
return { ".", " ", "\t" }
end

-- executes before selection
source.resolve = function (self, completion_item, callback)
source.resolve = function(self, completion_item, callback)
for _, fn in ipairs(self.executions) do
completion_item = fn(completion_item)
end
Expand Down Expand Up @@ -49,12 +45,12 @@ source.new = function(client, opts)
local completion_functions = require("copilot_cmp.completion_functions")

local self = setmetatable({
timer = vim.loop.new_timer()
timer = vim.loop.new_timer(),
}, { __index = source })

self.client = client
self.request_ids = {}
self.complete = completion_functions.init('getCompletionsCycling', opts)
self.complete = completion_functions.init("getCompletionsCycling", opts)

return self
end
Expand Down