diff options
Diffstat (limited to 'lua/lvim/lsp')
-rw-r--r-- | lua/lvim/lsp/config.lua | 6 | ||||
-rw-r--r-- | lua/lvim/lsp/init.lua | 7 | ||||
-rw-r--r-- | lua/lvim/lsp/utils.lua | 11 |
3 files changed, 20 insertions, 4 deletions
diff --git a/lua/lvim/lsp/config.lua b/lua/lvim/lsp/config.lua index 81a866f0..e3cd503b 100644 --- a/lua/lvim/lsp/config.lua +++ b/lua/lvim/lsp/config.lua @@ -121,6 +121,12 @@ return { insert_mode = {}, visual_mode = {}, }, + buffer_options = { + --- enable completion triggered by <c-x><c-o> + omnifunc = "v:lua.vim.lsp.omnifunc", + --- use gq for formatting + formatexpr = "v:lua.vim.lsp.formatexpr(#{timeout_ms:500})", + }, ---@usage list of settings of nvim-lsp-installer installer = { setup = { diff --git a/lua/lvim/lsp/init.lua b/lua/lvim/lsp/init.lua index 4d975963..53b4f248 100644 --- a/lua/lvim/lsp/init.lua +++ b/lua/lvim/lsp/init.lua @@ -3,6 +3,12 @@ local Log = require "lvim.core.log" local utils = require "lvim.utils" local autocmds = require "lvim.core.autocmds" +local function add_lsp_buffer_options(bufnr) + for k, v in pairs(lvim.lsp.buffer_options) do + vim.api.nvim_buf_set_option(bufnr, k, v) + end +end + local function add_lsp_buffer_keybindings(bufnr) local mappings = { normal_mode = "n", @@ -67,6 +73,7 @@ function M.common_on_attach(client, bufnr) lu.setup_codelens_refresh(client, bufnr) end add_lsp_buffer_keybindings(bufnr) + add_lsp_buffer_options(bufnr) end function M.get_common_opts() diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua index 2a23e501..fa1ac6d9 100644 --- a/lua/lvim/lsp/utils.lua +++ b/lua/lvim/lsp/utils.lua @@ -132,18 +132,20 @@ end ---filter passed to vim.lsp.buf.format ---always selects null-ls if it's available and caches the value per buffer ---@param client table client attached to a buffer ----@return table chosen clients +---@return boolean if client matches function M.format_filter(client) local filetype = vim.bo.filetype local n = require "null-ls" local s = require "null-ls.sources" local method = n.methods.FORMATTING - local avalable_sources = s.get_available(filetype, method) + local avalable_formatters = s.get_available(filetype, method) - if #avalable_sources > 0 then + if #avalable_formatters > 0 then return client.name == "null-ls" - else + elseif client.supports_method "textDocument/formatting" then return true + else + return false end end @@ -159,6 +161,7 @@ function M.format(opts) local bufnr = opts.bufnr or vim.api.nvim_get_current_buf() + ---@type table|nil local clients = vim.lsp.get_active_clients { id = opts.id, bufnr = bufnr, |