Files
LazyVim-mirror/lua/lazyvim/plugins/lsp/keymaps.lua

68 lines
1.8 KiB
Lua

local M = {}
---@type LazyKeysLspSpec[]|nil
M._keys = {}
---@alias LazyKeysLspSpec LazyKeysSpec|{has?:string|string[], enabled?:fun():boolean}
---@alias LazyKeysLsp LazyKeys|{has?:string|string[], enabled?:fun():boolean}
---@deprecated
---@return LazyKeysLspSpec[]
function M.get()
LazyVim.warn({
'Adding LSP keymaps via `require("lazyvim.plugins.lsp.keymaps").get()` is deprecated.',
"Please set keymaps via the `keys` field in the LSP server config.",
[[
```lua
{
"neovim/nvim-lspconfig",
opts = {
servers = {
['*'] = {
keys = {
{ "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", has = "definition"},
},
},
},
},
}
```]],
}, { stacktrace = true })
vim.schedule(function()
if #M._keys > 0 then
M.set({}, M._keys)
M._keys = {}
end
end)
return M._keys
end
---@param filter vim.lsp.get_clients.Filter
---@param spec LazyKeysLspSpec[]
function M.set(filter, spec)
local Keys = require("lazy.core.handler.keys")
for _, keys in pairs(Keys.resolve(spec)) do
---@cast keys LazyKeysLsp
local filters = {} ---@type vim.lsp.get_clients.Filter[]
if keys.has then
local methods = type(keys.has) == "string" and { keys.has } or keys.has --[[@as string[] ]]
for _, method in ipairs(methods) do
method = method:find("/") and method or ("textDocument/" .. method)
filters[#filters + 1] = vim.tbl_extend("force", vim.deepcopy(filter), { method = method })
end
else
filters[#filters + 1] = filter
end
for _, f in ipairs(filters) do
local opts = Keys.opts(keys)
---@cast opts snacks.keymap.set.Opts
opts.lsp = f
opts.enabled = keys.enabled
Snacks.keymap.set(keys.mode or "n", keys.lhs, keys.rhs, opts)
end
end
end
return M