feat: add nvimdots
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
local M = {}
|
||||
|
||||
M.setup = function()
|
||||
local diagnostics_virtual_text = require("core.settings").diagnostics_virtual_text
|
||||
local diagnostics_level = require("core.settings").diagnostics_level
|
||||
|
||||
local nvim_lsp = require("lspconfig")
|
||||
local mason_lspconfig = require("mason-lspconfig")
|
||||
require("lspconfig.ui.windows").default_options.border = "rounded"
|
||||
|
||||
require("modules.utils").load_plugin("mason-lspconfig", {
|
||||
ensure_installed = require("core.settings").lsp_deps,
|
||||
})
|
||||
|
||||
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
|
||||
signs = true,
|
||||
underline = true,
|
||||
virtual_text = diagnostics_virtual_text and {
|
||||
severity = {
|
||||
min = vim.diagnostic.severity[diagnostics_level],
|
||||
},
|
||||
} or false,
|
||||
-- set update_in_insert to false because it was enabled by lspsaga
|
||||
update_in_insert = false,
|
||||
})
|
||||
|
||||
local opts = {
|
||||
capabilities = vim.tbl_deep_extend(
|
||||
"force",
|
||||
vim.lsp.protocol.make_client_capabilities(),
|
||||
require("cmp_nvim_lsp").default_capabilities()
|
||||
),
|
||||
}
|
||||
---A handler to setup all servers defined under `completion/servers/*.lua`
|
||||
---@param lsp_name string
|
||||
local function mason_lsp_handler(lsp_name)
|
||||
-- rust_analyzer is configured using mrcjkb/rustaceanvim
|
||||
-- warn users if they have set it up manually
|
||||
if lsp_name == "rust_analyzer" then
|
||||
local config_exist = pcall(require, "completion.servers." .. lsp_name)
|
||||
if config_exist then
|
||||
vim.notify(
|
||||
[[
|
||||
`rust_analyzer` is configured independently via `mrcjkb/rustaceanvim`. To get rid of this warning,
|
||||
please REMOVE your LSP configuration (rust_analyzer.lua) from the `servers` directory and configure
|
||||
`rust_analyzer` using the appropriate init options provided by `rustaceanvim` instead.]],
|
||||
vim.log.levels.WARN,
|
||||
{ title = "nvim-lspconfig" }
|
||||
)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
local ok, custom_handler = pcall(require, "user.configs.lsp-servers." .. lsp_name)
|
||||
-- Use preset if there is no user definition
|
||||
if not ok then
|
||||
ok, custom_handler = pcall(require, "completion.servers." .. lsp_name)
|
||||
end
|
||||
if not ok then
|
||||
-- Default to use factory config for server(s) that doesn't include a spec
|
||||
nvim_lsp[lsp_name].setup(opts)
|
||||
return
|
||||
elseif type(custom_handler) == "function" then
|
||||
--- Case where language server requires its own setup
|
||||
--- Make sure to call require("lspconfig")[lsp_name].setup() in the function
|
||||
--- See `clangd.lua` for example.
|
||||
custom_handler(opts)
|
||||
elseif type(custom_handler) == "table" then
|
||||
nvim_lsp[lsp_name].setup(vim.tbl_deep_extend("force", opts, custom_handler))
|
||||
else
|
||||
vim.notify(
|
||||
string.format(
|
||||
"Failed to setup [%s].\n\nServer definition under `completion/servers` must return\neither a fun(opts) or a table (got '%s' instead)",
|
||||
lsp_name,
|
||||
type(custom_handler)
|
||||
),
|
||||
vim.log.levels.ERROR,
|
||||
{ title = "nvim-lspconfig" }
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
mason_lspconfig.setup_handlers({ mason_lsp_handler })
|
||||
end
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user