diff options
Diffstat (limited to 'store/config/nvim/lua/setup/lsp.lua')
| -rw-r--r-- | store/config/nvim/lua/setup/lsp.lua | 81 |
1 files changed, 53 insertions, 28 deletions
diff --git a/store/config/nvim/lua/setup/lsp.lua b/store/config/nvim/lua/setup/lsp.lua index 472cdaf..45aa100 100644 --- a/store/config/nvim/lua/setup/lsp.lua +++ b/store/config/nvim/lua/setup/lsp.lua @@ -1,5 +1,3 @@ --- spellchecker: words denols luals - vim.lsp.config("*", { capabilities = vim.tbl_extend("force", vim.lsp.protocol.make_client_capabilities(), @@ -7,26 +5,31 @@ vim.lsp.config("*", { ) }) -local function setup_clangd() - local clangd = "clangd" - local brew_clangd_path = "/usr/local/opt/llvm/bin/clangd" - - if vim.uv.fs_stat(brew_clangd_path) ~= nil then - clangd = brew_clangd_path - end - - vim.lsp.config("clangd", { cmd = { clangd } }) +---@param ev vim.api.keyset.create_autocmd.callback_args +---@param name string +local function client_name_is(ev, name) + local client = vim.lsp.get_client_by_id(ev.data.client_id) + return client and client.name == name +end - vim.api.nvim_create_autocmd('LspAttach', { +local function setup_clangd() + vim.api.nvim_create_autocmd("LspAttach", { callback = function(ev) - local client = vim.lsp.get_client_by_id(ev.data.client_id) - if client and client.name == "clangd" then - vim.keymap.set('n', 'grs', "<cmd>ClangdSwitchSourceHeader<cr>", { + if client_name_is(ev, "clangd") then + vim.keymap.set("n", "grs", "<cmd>LspClangdSwitchSourceHeader<cr>", { buffer = ev.buf }) end end }) + + vim.api.nvim_create_autocmd("LspDetach", { + callback = function(ev) + if client_name_is(ev, "clangd") then + vim.keymap.del("n", "grs", { buffer = ev.buf }) + end + end + }) end local function setup_lua_ls() @@ -51,6 +54,11 @@ local function setup_lua_ls() }) end +function vim.crupest.no_range_format() + print("Lsp doesn't support range formatting. Use gqa to format the whole document.") + return 0 +end + local function setup_denols() vim.lsp.config("denols", { root_dir = function(bufnr, on_dir) @@ -62,28 +70,45 @@ local function setup_denols() end end, }) + + vim.api.nvim_create_autocmd("LspAttach", { + callback = function(ev) + if client_name_is(ev, "denols") then + vim.api.nvim_set_option_value( + "formatexpr", + "v:lua.vim.crupest.no_range_format()", + { buf = ev.buf } + ) + end + end + }) + + vim.api.nvim_create_autocmd("LspDetach", { + callback = function(ev) + if client_name_is(ev, "denols") then + vim.api.nvim_set_option_value("formatexpr", "", { buf = ev.buf }) + end + end + }) end local function setup() - setup_clangd() - setup_lua_ls() - setup_denols() - - function _G.crupest_no_range_format() - vim.notify("Range format is no supported by the lsp.", vim.log.levels.ERROR, {}) - end + vim.api.nvim_create_autocmd("LspAttach", { + callback = function(ev) + vim.keymap.set("n", "gqa", vim.lsp.buf.format, { buffer = ev.buf }) + end + }) - vim.api.nvim_create_autocmd('LspAttach', { + vim.api.nvim_create_autocmd("LspDetach", { callback = function(ev) - local client = vim.lsp.get_client_by_id(ev.data.client_id) - vim.keymap.set('n', 'gqa', vim.lsp.buf.format, { buffer = ev.buf }) - if client and not client:supports_method('textDocument/rangeFormatting') then - vim.bo[ev.buf].formatexpr = "v:lua.crupest_no_range_format()" - end + vim.keymap.del("n", "gqa", { buffer = ev.buf }) end }) + setup_clangd() + setup_lua_ls() + setup_denols() vim.lsp.enable({ "clangd", "lua_ls", "denols" }) end |
