refactor(lsp): turn completion popup and request into classes

This commit is contained in:
2026-04-16 02:24:04 +02:00
parent d0c1f7e2d8
commit e3e4d81ab0
3 changed files with 305 additions and 273 deletions
+16 -10
View File
@@ -1,8 +1,10 @@
local popup = require("lsp.completion.popup")
local Popup = require("lsp.completion.popup")
local request = require("lsp.completion.request")
local GROUP = vim.api.nvim_create_augroup("ow.lsp.completion", { clear = true })
local popup = Popup.new()
local M = {}
---@param capabilities lsp.ClientCapabilities
@@ -48,7 +50,9 @@ function M.setup()
local client = client_id and vim.lsp.get_client_by_id(client_id)
if not lsp_item or not client then
vim.schedule(popup.close)
vim.schedule(function()
popup:close()
end)
return
end
@@ -67,7 +71,7 @@ function M.setup()
vim.lsp.protocol.Methods.completionItem_resolve
)
then
popup.dispatch_resolve(
popup:dispatch_resolve(
client,
lsp_item,
ft,
@@ -77,7 +81,7 @@ function M.setup()
)
else
vim.schedule(function()
popup.show_for(lsp_item, ft, pum)
popup:show(lsp_item, ft, pum)
end)
end
end,
@@ -85,14 +89,16 @@ function M.setup()
vim.api.nvim_create_autocmd({ "CompleteDonePre", "InsertLeave" }, {
group = GROUP,
callback = popup.close,
callback = function()
popup:close()
end,
})
---@param key string
---@param action fun()
local function scroll_map(key, action)
vim.keymap.set("i", key, function()
if popup.is_visible() then
if popup:is_visible() then
vim.schedule(action)
return ""
end
@@ -100,16 +106,16 @@ function M.setup()
end, { expr = true, replace_keycodes = true })
end
scroll_map("<C-d>", function()
popup.scroll_half(vim.keycode("<C-e>"))
popup:scroll_half(vim.keycode("<C-e>"))
end)
scroll_map("<C-u>", function()
popup.scroll_half(vim.keycode("<C-y>"))
popup:scroll_half(vim.keycode("<C-y>"))
end)
scroll_map("<C-j>", function()
popup.scroll_line(vim.keycode("<C-e>"))
popup:scroll_line(vim.keycode("<C-e>"))
end)
scroll_map("<C-k>", function()
popup.scroll_line(vim.keycode("<C-y>"))
popup:scroll_line(vim.keycode("<C-y>"))
end)
end