nviiim/after/plugin/LSP.lua
Robert Morrison 5a8b28066c
fix(LSP)!: Repair LSP config to handle plugin changes
Update the LSP config to avoid using setup_handlers for some mason
plugins since the functions have been deprecated.
2023-04-17 15:58:29 +01:00

182 lines
4.3 KiB
Lua

local utilities = require("sherlock5512.utilities")
local log = require("tjdevries.log")
local required = {'mason','mason-lspconfig','lspconfig','cmp_nvim_lsp','fidget','neodev','mason-null-ls','mason-nvim-dap','dap','dapui'}
local modules = utilities.require_modules(required)
if not modules then
log.error("some modules could not be loaded")
return
end
local capabilities = modules['cmp_nvim_lsp'].default_capabilities()
modules['neodev'].setup()
modules["mason"].setup()
modules["mason-lspconfig"].setup {
ensure_installed = {"lua_ls"}
}
modules["mason-lspconfig"].setup_handlers {
function (server_name)
modules["lspconfig"][server_name].setup {
capabilities = capabilities
}
end,
["omnisharp"] = function ()
modules["lspconfig"]["omnisharp"].setup {
capabilities = capabilities,
on_attach = function (_,_)
local gr = vim.api.nvim_create_augroup("CS-OnAttach",{})
vim.api.nvim_create_autocmd({"BufWritePre"}, {
group = gr,
pattern = {"*.cs"},
desc = "(C#) Format before write",
callback = function ()
vim.lsp.buf.format()
end
}
)
end
}
end
}
modules['mason-null-ls'].setup({
ensure_installed = {},
automatic_installation = false,
automatic_setup = true,
})
modules['fidget'].setup{
text = {
spinner = "dots"
}
}
-- Built in diagnostic settings are also configured here
vim.diagnostic.config({
virtual_text = true,
signs = true,
underline = true,
update_in_insert = true,
severity_sort = false,
})
local signs = { Error = "", Warn = "", Hint = "", Info = "" }
for type, icon in pairs(signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, {text = icon, texthl = hl, numhl = hl})
end
local auGroupDiagHover = vim.api.nvim_create_augroup("Diagnostic_hover",{clear = true})
vim.api.nvim_create_autocmd("CursorHold",{
pattern = {"*"},
callback = function ()
vim.diagnostic.open_float(nil, {focus=false, scope="cursor"})
end,
group = auGroupDiagHover
})
-- ## DAP ## warning: here be dragons
modules['mason-nvim-dap'].setup({
automatic_setup = true,
})
modules['dapui'].setup({
icons = {
expanded = "",
collapsed = "",
current_frame = "",
},
expand_lines = vim.fn.has("nvim-0.7") == 1,
layouts = {
{
elements = {
-- Elements can be strings or table with id and size keys.
{ id = "scopes", size = 0.25 },
"breakpoints",
"stacks",
"watches",
},
size = 40, -- 40 columns
position = "left",
},
{
elements = {
"repl",
"console",
},
size = 0.25, -- 25% of total lines
position = "bottom",
},
},
controls = {
-- Requires Neovim nightly (or 0.8 when released)
enabled = true,
-- Display controls in this element
element = "repl",
icons = {
pause = "",
play = "",
step_into = "",
step_over = "",
step_out = "",
step_back = "",
run_last = "",
terminate = "",
},
},
floating = {
max_height = nil, -- These can be integers or a float between 0 and 1.
max_width = nil, -- Floats will be treated as percentage of your screen.
border = "single", -- Border style. Can be "single", "double" or "rounded"
mappings = {
close = { "q", "<Esc>" },
},
},
windows = { indent = 1 },
render = {
max_type_length = nil, -- Can be integer or nil.
max_value_lines = 100, -- Can be integer or nil.
}
})
modules['dap'].listeners.after.event_initialized["dapui_config"] = function()
modules['dapui'].open()
end
modules['dap'].listeners.before.event_terminated["dapui_config"] = function()
modules['dapui'].close()
end
modules['dap'].listeners.before.event_exited["dapui_config"] = function()
modules['dapui'].close()
end
-- Also configure lspsaga here.
-- Separate require check since we don't NEED lspsaga
local ok,lspsaga = pcall(require,"lspsaga")
if not ok then
return
end
-- Wrapping since some distros still don't ship nvim 0.8
if vim.fn.exists('+winbar') ~= 0 then
lspsaga.setup({
symbol_in_winbar = {
in_custom = false,
enable = true,
seperator = '>',
show_file = true,
click_support = false
},
diagnostic_header = { "", "", "", "" },
})
else
lspsaga.setup({
diagnostic_header = { "", "", "", "" },
})
end