diff --git a/config/nvim/lua/config/lsp.lua b/config/nvim/lua/config/lsp.lua index 273f1ad..62fc24f 100644 --- a/config/nvim/lua/config/lsp.lua +++ b/config/nvim/lua/config/lsp.lua @@ -1,4 +1,17 @@ local M = {} +local cached_capabilities + +local function load_blink() + local ok_lz, lz = pcall(require, "lz.n") + if ok_lz then pcall(lz.trigger_load, "saghen/blink.cmp") end + + local ok_blink, blink = pcall(require, "blink.cmp") + if ok_blink then return blink end + + pcall(vim.cmd.packadd, "blink.cmp") + ok_blink, blink = pcall(require, "blink.cmp") + if ok_blink then return blink end +end function M.on_attach(_, bufnr) local function buf(mode, lhs, rhs) bmap(mode, lhs, rhs, { buffer = bufnr }) end @@ -14,6 +27,17 @@ function M.on_attach(_, bufnr) buf("n", "f", function() vim.lsp.buf.format { async = true } end) end -function M.capabilities() return vim.lsp.protocol.make_client_capabilities() end +function M.capabilities() + if cached_capabilities then return vim.deepcopy(cached_capabilities) end + + local capabilities = vim.lsp.protocol.make_client_capabilities() + local blink = load_blink() + if blink and blink.get_lsp_capabilities then + capabilities = blink.get_lsp_capabilities(capabilities) + end + + cached_capabilities = capabilities + return vim.deepcopy(cached_capabilities) +end return M diff --git a/config/nvim/plugin/autocmds.lua b/config/nvim/plugin/autocmds.lua index 2026a35..a5b0110 100644 --- a/config/nvim/plugin/autocmds.lua +++ b/config/nvim/plugin/autocmds.lua @@ -3,8 +3,9 @@ local augroup = api.nvim_create_augroup("UserAutocmds", { clear = true }) local function maybe_load_canola(bufnr) local name = api.nvim_buf_get_name(bufnr) - if name == "" or vim.fn.isdirectory(name) == 0 then return end + if name == "" or vim.bo[bufnr].filetype == "canola" or vim.fn.isdirectory(name) == 0 then return end + pcall(vim.cmd.packadd, "canola.nvim") pcall(vim.cmd, "silent keepalt Canola " .. vim.fn.fnameescape(name)) end