94 lines
3.2 KiB
Lua
94 lines
3.2 KiB
Lua
vim.fn.sign_define(
|
|
"DiagnosticSignError",
|
|
{ text = " ", texthl = "DiagnosticSignError", numhl = "LspDiagnosticsLineNrError" }
|
|
)
|
|
vim.fn.sign_define(
|
|
"DiagnosticSignWarn",
|
|
{ text = " ", texthl = "DiagnosticSignWarn", numhl = "LspDiagnosticsLineNrWarning" }
|
|
)
|
|
vim.fn.sign_define(
|
|
"DiagnosticSignInformation",
|
|
{ text = " ", texthl = "DiagnosticSignInfo", numhl = "LspDiagnosticsLineNrInformation" }
|
|
)
|
|
vim.fn.sign_define(
|
|
"DiagnosticSignHint",
|
|
{ text = " ", texthl = "DiagnosticSignHint", numhl = "LspDiagnosticsLineNrHint" }
|
|
)
|
|
|
|
vim.diagnostic.config({
|
|
virtual_text = false,
|
|
update_in_insert = true,
|
|
severity_sort = true,
|
|
source = "always",
|
|
})
|
|
|
|
local U = {}
|
|
|
|
function U.fmt_on_save(client)
|
|
if client.resolved_capabilities.document_formatting then
|
|
vim.api.nvim_command("autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_sync()")
|
|
end
|
|
end
|
|
|
|
function U.capabilities()
|
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
|
return require("cmp_nvim_lsp").update_capabilities(capabilities)
|
|
end
|
|
|
|
---Disable formatting for servers. Handles by null-ls
|
|
---@source https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Avoiding-LSP-formatting-conflicts
|
|
function U.disable_formatting(client)
|
|
client.resolved_capabilities.document_formatting = false
|
|
client.resolved_capabilities.document_range_formatting = false
|
|
end
|
|
|
|
function U.mappings(bufnr)
|
|
local opts = { noremap = true, silent = true }
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "gh", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "i", "<C-h>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>ca", "<cmd>lua vim.lsp.buf.code_action()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "{g", "<cmd>lua vim.diagnostic.goto_prev()<CR>", opts)
|
|
vim.api.nvim_buf_set_keymap(bufnr, "n", "}g", "<cmd>lua vim.diagnostic.goto_next()<CR>", opts)
|
|
end
|
|
|
|
function U.goto_split(split_cmd)
|
|
local handler = function(_, result, ctx)
|
|
if result == nil or vim.tbl_isempty(result) then
|
|
local _ = require("vim.lsp.log").info() and require("vim.lsp.log").info(ctx.method, "No location found")
|
|
return nil
|
|
end
|
|
|
|
if split_cmd then
|
|
vim.cmd(split_cmd)
|
|
end
|
|
|
|
if vim.tbl_islist(result) then
|
|
vim.lsp.util.jump_to_location(result[1])
|
|
|
|
if #result > 1 then
|
|
vim.lsp.util.set_qflist(vim.lsp.util.locations_to_items(result))
|
|
vim.api.nvim_command("copen")
|
|
vim.api.nvim_command("wincmd p")
|
|
end
|
|
else
|
|
vim.lsp.util.jump_to_location(result)
|
|
end
|
|
end
|
|
|
|
return handler
|
|
end
|
|
|
|
function U.code_action_listener()
|
|
local context = { diagnostics = vim.lsp.diagnostic.get_line_diagnostics() }
|
|
local params = vim.lsp.util.make_range_params()
|
|
params.context = context
|
|
vim.lsp.buf_request(0, "textDocument/codeAction", params, function(err, _, result) end)
|
|
end
|
|
|
|
return U
|