You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.1 KiB
Lua
99 lines
3.1 KiB
Lua
return {
|
|
{
|
|
"neovim/nvim-lspconfig",
|
|
config = function()
|
|
-- Reserve a space in the gutter
|
|
vim.opt.signcolumn = 'yes'
|
|
vim.api.nvim_create_autocmd('LspAttach', {
|
|
desc = 'LSP actions',
|
|
callback = function(event)
|
|
local opts = { buffer = event.buffer, remap = false }
|
|
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
|
|
|
-- Enable built-in completion if supported
|
|
if client and client.supports_method('textDocument/completion') then
|
|
vim.lsp.completion.enable(true, client.id, event.buf, { autotrigger = true })
|
|
end
|
|
|
|
-- LSP keybindings
|
|
vim.keymap.set('n', 'gd', function() vim.lsp.buf.definition() end, opts)
|
|
vim.keymap.set('n', '<leader>k', function() vim.lsp.buf.hover() end, opts)
|
|
vim.keymap.set('n', '<leader>r', function() vim.lsp.buf.rename() end, opts)
|
|
vim.keymap.set('n', '<leader>a', function() vim.lsp.buf.code_action() end, opts)
|
|
vim.keymap.set('n', 'gr', function() vim.lsp.buf.references() end, opts)
|
|
vim.keymap.set('n', '<leader>d', function() vim.diagnostic.open_float() end, opts)
|
|
vim.keymap.set('n', '[d', function() vim.diagnostic.goto_prev() end, opts)
|
|
vim.keymap.set('n', ']d', function() vim.diagnostic.goto_next() end, opts)
|
|
vim.keymap.set('n', '<leader>Q', function() vim.diagnostic.set_qflist() end, opts)
|
|
vim.keymap.set('n', '<leader>F', function() vim.lsp.buf.format() end, opts)
|
|
|
|
-- Built-in completion keybindings
|
|
vim.keymap.set('i', '<C-Space>', '<C-x><C-o>', opts)
|
|
vim.keymap.set('i', '<C-n>', function()
|
|
if vim.fn.pumvisible() == 1 then
|
|
return '<C-n>'
|
|
else
|
|
return '<C-x><C-o>'
|
|
end
|
|
end, { buffer = event.buffer, expr = true })
|
|
end,
|
|
})
|
|
|
|
vim.lsp.config('rust_analyzer', {
|
|
settings = {
|
|
["rust-analyzer"] = {
|
|
checkOnSave = {
|
|
allFeatures = true,
|
|
command = { "clippy" },
|
|
},
|
|
procMacro = {
|
|
enable = true,
|
|
ignored = {
|
|
leptos_macro = { "server" },
|
|
},
|
|
},
|
|
cargo = {
|
|
allFeatures = true,
|
|
autoreload = true,
|
|
},
|
|
rustfmt = {
|
|
overrideCommand = { "leptosfmt", "--stdin", "--rustfmt" },
|
|
},
|
|
callInfo = { full = true },
|
|
lens = {
|
|
enable = true,
|
|
references = true,
|
|
implementations = true,
|
|
enumVariantReferences = true,
|
|
methodReferences = true,
|
|
},
|
|
inlayHints = {
|
|
enable = true,
|
|
typeHints = true,
|
|
parameterHints = true,
|
|
},
|
|
hoverActions = { enable = true, },
|
|
}
|
|
}
|
|
})
|
|
vim.lsp.enable('rust_analyzer')
|
|
|
|
vim.lsp.enable('pylsp')
|
|
vim.lsp.enable('ruff')
|
|
vim.lsp.enable('ts_ls')
|
|
vim.lsp.enable('oxlint')
|
|
|
|
-- Workaround for rust_analyzer diagnostic issue
|
|
for _, method in ipairs({ 'textDocument/diagnostic', 'workspace/diagnostic' }) do
|
|
local default_diagnostic_handler = vim.lsp.handlers[method]
|
|
vim.lsp.handlers[method] = function(err, result, context, config)
|
|
if err ~= nil and err.code == -32802 then
|
|
return
|
|
end
|
|
return default_diagnostic_handler(err, result, context, config)
|
|
end
|
|
end
|
|
end,
|
|
}
|
|
}
|