From c62e2aecf164bf13d57906226d1b2a34bd490d85 Mon Sep 17 00:00:00 2001 From: JosefLitos Date: Thu, 18 Apr 2024 10:17:12 +0200 Subject: [PATCH 1/4] fix: removed unnecessary code + indent copying --- lua/copilot_cmp/completion_functions.lua | 21 +++++++++++++-------- lua/copilot_cmp/source.lua | 4 ---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lua/copilot_cmp/completion_functions.lua b/lua/copilot_cmp/completion_functions.lua index c7ee231..dc10d8b 100644 --- a/lua/copilot_cmp/completion_functions.lua +++ b/lua/copilot_cmp/completion_functions.lua @@ -5,31 +5,36 @@ 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 = false, 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) + ret.textEdit.insert["end"].character = ret.textEdit.insert.start.character + return ret end, vim.tbl_values(response.completions)) return callback({ isIncomplete = false, - items = items + 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 diff --git a/lua/copilot_cmp/source.lua b/lua/copilot_cmp/source.lua index f92480c..025c8d0 100644 --- a/lua/copilot_cmp/source.lua +++ b/lua/copilot_cmp/source.lua @@ -2,10 +2,6 @@ local source = { executions = {}, } -function source:get_keyword_pattern() - return '.' -end - source.get_trigger_characters = function() return {'.'} end From 4c3ec7f046a0e94472cde918c54f76ff50d66c98 Mon Sep 17 00:00:00 2001 From: JosefLitos Date: Thu, 18 Apr 2024 10:19:47 +0200 Subject: [PATCH 2/4] fix: updated old comparators to current cmp structure --- lua/copilot_cmp/comparators.lua | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lua/copilot_cmp/comparators.lua b/lua/copilot_cmp/comparators.lua index 258a754..a059917 100644 --- a/lua/copilot_cmp/comparators.lua +++ b/lua/copilot_cmp/comparators.lua @@ -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 From f88948e71ac9f9d411a9a5533a366caf5c41c6dd Mon Sep 17 00:00:00 2001 From: JosefLitos Date: Thu, 18 Apr 2024 15:06:19 +0200 Subject: [PATCH 3/4] fix(autocompletion): always `isIncomplete` + space/tab trigger char --- lua/copilot_cmp/completion_functions.lua | 4 ++-- lua/copilot_cmp/source.lua | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lua/copilot_cmp/completion_functions.lua b/lua/copilot_cmp/completion_functions.lua index dc10d8b..1768d17 100644 --- a/lua/copilot_cmp/completion_functions.lua +++ b/lua/copilot_cmp/completion_functions.lua @@ -11,7 +11,7 @@ local methods = { 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 @@ -26,7 +26,7 @@ methods.getCompletionsCycling = function(self, params, callback) end, vim.tbl_values(response.completions)) return callback({ - isIncomplete = false, + isIncomplete = true, items = items, }) end diff --git a/lua/copilot_cmp/source.lua b/lua/copilot_cmp/source.lua index 025c8d0..fd687fe 100644 --- a/lua/copilot_cmp/source.lua +++ b/lua/copilot_cmp/source.lua @@ -3,11 +3,11 @@ local source = { } 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 @@ -33,7 +33,7 @@ source.is_available = function(self) return true end -source.execute = function (self, completion_item, callback) +source.execute = function(self, completion_item, callback) callback(completion_item) end @@ -41,12 +41,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 From ba99ab627c6cccd013573a924fc8cf99cf3ff82e Mon Sep 17 00:00:00 2001 From: JosefLitos Date: Thu, 18 Apr 2024 16:29:56 +0200 Subject: [PATCH 4/4] fix: allow overriding existing tex --- lua/copilot_cmp/completion_functions.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/copilot_cmp/completion_functions.lua b/lua/copilot_cmp/completion_functions.lua index 1768d17..be4ed9c 100644 --- a/lua/copilot_cmp/completion_functions.lua +++ b/lua/copilot_cmp/completion_functions.lua @@ -21,7 +21,9 @@ methods.getCompletionsCycling = function(self, params, callback) ret.textEdit.insert.start.character = ret.textEdit.insert.start.character + indent - 1 ret.textEdit.newText = ret.textEdit.newText:sub(indent) - ret.textEdit.insert["end"].character = ret.textEdit.insert.start.character + 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))