require('my/plugins') require('my/keymaps') require('my/completion') packer.use { 'https://github.com/neovim/nvim-lspconfig', tag = '*', requires = 'https://github.com/hrsh7th/cmp-nvim-lsp', config = function() map('n', '', vim.diagnostic.goto_prev) map('n', '', vim.diagnostic.goto_next) -- only do this after the language server attaches to the current buffer local on_attach = function(client, bufnr) local function map(mode, shortcut, command) vim.keymap.set(mode, shortcut, command, { noremap = true, silent = true, buffer=bufnr }) end map('n', 'gD', vim.lsp.buf.declaration) map('n', 'gd', vim.lsp.buf.definition) map('n', 'gi', vim.lsp.buf.implementation) map('n', 'gr', vim.lsp.buf.references) map('n', 'K', vim.lsp.buf.hover) map('n', '', vim.lsp.buf.signature_help) map('n', 'lwa', vim.lsp.buf.add_workspace_folder) map('n', 'lwr', vim.lsp.buf.remove_workspace_folder) map('n', 'lwl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end) map('n', 'lr', vim.lsp.buf.rename) map('n', 'la', vim.lsp.buf.code_action) map('n', 'lf', vim.lsp.buf.formatting) -- highlight symbol under cursor if client.resolved_capabilities.document_highlight then vim.cmd [[ hi! LspReferenceRead cterm=bold ctermbg=red guibg=#633466 hi! LspReferenceText cterm=bold ctermbg=red guibg=#633466 hi! LspReferenceWrite cterm=bold ctermbg=red guibg=#633466 ]] vim.api.nvim_create_augroup('config_lsp', { clear = false }) vim.api.nvim_clear_autocmds({ buffer = bufnr, group = 'config_lsp', }) vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { group = 'config_lsp', buffer = bufnr, callback = vim.lsp.buf.document_highlight, }) vim.api.nvim_create_autocmd('CursorMoved', { group = 'config_lsp', buffer = bufnr, callback = vim.lsp.buf.clear_references, }) end -- -- show help on hover -- if client.resolved_capabilities.hover then -- vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { -- group = 'config_lsp', -- buffer = bufnr, -- callback = vim.lsp.buf.hover, -- }) -- end end -- update client capabilities with completion plugin stuff local capabilities = require('cmp_nvim_lsp').update_capabilities( vim.lsp.protocol.make_client_capabilities()) -- setup servers if vim.fn.executable('clangd') > 0 then require'lspconfig'.clangd.setup{ cmd = { 'clangd', '--compile-commands-dir=build', '--clang-tidy', -- needs >=clangd-9 '--ranking-model=decision_forest' -- needs >=clangd-12 }, on_attach = on_attach, capabilities = capabilities } end if vim.fn.executable('lua-language-server') > 0 then require'lspconfig'.sumneko_lua.setup { settings = { Lua = { runtime = { version = 'LuaJIT', }, diagnostics = { globals = {'vim'}, }, workspace = { library = vim.api.nvim_get_runtime_file("", true), }, telemetry = { enable = false, }, completion = { -- complete full function signature callSnippet = 'Replace', }, }, }, on_attach = on_attach, capabilities = capabilities } end if vim.fn.executable('pylsp') > 0 then require'lspconfig'.pylsp.setup{ settings = { pylsp = { } }, on_attach = on_attach, capabilities = capabilities } end if vim.fn.executable('lemminx') > 0 then require'lspconfig'.lemminx.setup{ filetypes = { 'xml', 'xsd', 'xsl', 'xslt', 'svg', 'gentoo-metadata' }, on_attach = on_attach, capabilities = capabilities } end if vim.fn.executable('vscode-html-language-server') > 0 then require'lspconfig'.html.setup{ on_attach = on_attach, capabilities = capabilities } end if vim.fn.executable('vscode-css-language-server') > 0 then require'lspconfig'.cssls.setup{ on_attach = on_attach, capabilities = capabilities } end if vim.fn.executable('vscode-eslint-language-server') > 0 then require'lspconfig'.eslint.setup{ on_attach = on_attach, capabilities = capabilities } end if vim.fn.executable('vscode-json-language-server') > 0 then require'lspconfig'.jsonls.setup{ on_attach = on_attach, capabilities = capabilities } end end }