local opts = { noremap=true, silent=true } local lsputil = require('lspconfig/util') local python_venv = require('utils').get_python_venv() local on_attach = function(client, bufnr) -- Enable completion triggered by vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'f', 'lua vim.lsp.buf.formatting()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) end vim.api.nvim_set_keymap('n', 'd', 'lua vim.diagnostic.open_float()', opts) vim.api.nvim_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) vim.api.nvim_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) -- require('lspconfig').ansiblels.setup{ on_attach = on_attach } require('lspconfig').clangd.setup{ on_attach = on_attach, filetypes = { "c", "cpp", "objc", "objcpp", "cuda" } } require('lspconfig').eslint.setup{ on_attach = on_attach } require('lspconfig').gopls.setup{ on_attach = on_attach } require('lspconfig').terraformls.setup{ on_attach = on_attach } require('lspconfig').dartls.setup{ on_attach = on_attach, settings = { dart = { analysisExcludedFolders = { '.git' }, completeFunctionCalls = true, enableSdkFormatter = true, showTodos = true } } } require('lspconfig').pylsp.setup{ cmd_env = { VIRTUAL_ENV = python_venv, PATH = lsputil.path.join(python_venv, 'bin') .. ':' .. vim.env.PATH, MYPYPATH = lsputil.path.join(python_venv, 'bin') .. ':' .. (vim.env.MYPYPATH or "") }, on_attach = on_attach, settings = { pylsp = { configurationSources = { 'flake8', 'pycodestyle' }, plugins = { flake8 = { -- enabled = vim.fn.executable('flake8') == 1, enabled = true, ignore = {}, maxLineLength = 160, cmd = 'flake8', }, rope_completion = { enabled = true, }, pyflakes = { enabled = true, }, pylsp_mypy = { overrides = { '--show-error-codes', true }, } } } } } require('lspconfig').elixirls.setup{ cmd = {'elixir-ls'}, on_attach = on_attach }