diff options
| author | yuzu-eva <stevenhu@web.de> | 2022-12-23 22:01:25 +0100 |
|---|---|---|
| committer | yuzu-eva <stevenhu@web.de> | 2022-12-23 22:01:25 +0100 |
| commit | c9502c9c4b61c4cab7655c484ef7e577308343cf (patch) | |
| tree | 699e8a51e94a3b2a1ba42b83d0c0cfa1b7a142cf /.config/nvim/lua/user/plugins/lspconfig.lua | |
| parent | ee92c6100fd18a80309bcaa86d1cbc20f8f2cd49 (diff) | |
readded nvim
Diffstat (limited to '.config/nvim/lua/user/plugins/lspconfig.lua')
| -rw-r--r-- | .config/nvim/lua/user/plugins/lspconfig.lua | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/.config/nvim/lua/user/plugins/lspconfig.lua b/.config/nvim/lua/user/plugins/lspconfig.lua new file mode 100644 index 0000000..a63975b --- /dev/null +++ b/.config/nvim/lua/user/plugins/lspconfig.lua @@ -0,0 +1,131 @@ +local buf_option = vim.api.nvim_buf_set_option +local buf_keymap = require 'lib.utils'.buf_keymap + +vim.diagnostic.config { + virtual_text = false, + severity_sort = true, + float = { + source = true, + focus = false, + format = function(diagnostic) + if diagnostic.user_data ~= nil and diagnostic.user_data.lsp.code ~= nil then + return string.format("%s: %s", diagnostic.user_data.lsp.code, diagnostic.message) + end + return diagnostic.message + end, + } +} + +local on_attach = function(_, bufnr) + buf_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + buf_keymap(bufnr, 'n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>') + buf_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>') + buf_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>') + buf_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>') + buf_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>') + buf_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>') + buf_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>') + buf_keymap(bufnr, 'n', 'gr', ':Telescope lsp_references<CR>') + + buf_keymap(bufnr, 'n', '<leader>ca', ':CodeActionMenu<CR>') + buf_keymap(bufnr, 'v', '<leader>ca', ':CodeActionMenu<CR>') + + buf_keymap(bufnr, 'n', '<leader>d', '<cmd>lua vim.diagnostic.open_float()<CR>') + buf_keymap(bufnr, 'n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>') + buf_keymap(bufnr, 'n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>') + buf_keymap(bufnr, 'n', '<leader>F', '<cmd>lua vim.lsp.buf.format { async = true }<CR>') + + -- Autoformat on save doesn't work with server_capabilities, even + -- though it's the replacement for the deprecated resolved_capabilities. + + -- if _.server_capabilities.document_formatting then + -- vim.api.nvim_command [[augroup Format]] + -- vim.api.nvim_command [[autocmd! * <buffer>]] + -- vim.api.nvim_command [[autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_seq_sync()]] + -- vim.api.nvim_command [[augroup END]] + -- end +end + +-- provide additional completion capabilities +local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()) + +require 'lspconfig'.emmet_ls.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, + filetypes = { 'html', 'javascript', 'typescript', 'javascriptreact', 'typescriptreact' } +} + +local runtime_path = vim.split(package.path, ';') +table.insert(runtime_path, "lua/?.lua") +table.insert(runtime_path, "lua/?/init.lua") +require 'lspconfig'.sumneko_lua.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, + cmd = { "/home/cafebabe/.local/src/lua-language-server/bin/lua-language-server", "-E", "/home/cafebabe/.local/src/lua-language-server/bin/main.lua" }; + settings = { + Lua = { + runtime = { + -- Tell language server which version of lua is used. + version = 'LuaJIT', + -- Setup lua path + path = runtime_path, + }, + diagnostics = { + -- Recognize globals + globals = { 'vim', 'use', 'parse' }, + }, + workspace = { + -- Make server aware of Neovim runtime files + library = vim.api.nvim_get_runtime_file("", true), + }, + -- Do not send telemetry data + telemetry = { + enable = false, + }, + }, + }, +} + +require 'lspconfig'.bashls.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, +} + +require 'lspconfig'.pylsp.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, +} + +require 'lspconfig'.clangd.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, +} + + +-- suppress error messages from lang servers +vim.notify = function(msg, log_level, _) + if msg:match 'exit code' then + return + end + if log_level == vim.log.levels.ERROR then + vim.api.nvim_err_writeln(msg) + else + vim.api.nvim_echo({ { msg } }, true, {}) + end +end |
